Android开发中的技术细节

浏览:
字体:
发布时间:2013-12-22 23:48:31
来源:

1、PendingIntent的使用注意事项

public static PendingIntent getActivity (Context context, int requestCode, Intent intent, int flags)

Android开发中,通知栏消息点击事件和widget界面view点击事件都是设置PendingIntent,PendingIntent在系统中是一个Map,它的key是Intent和requestCode。如果PendingIntent的requestCode一样并且Intent一样,那么系统认为两个PendingIntent是一样的。而Intent是否一样系统只判断action、category、datauri,不判断extra。由此可知,当我们在开发中遇到使用PendingIntent开发导致Intent传入参数没有及时更新时,首先检查我们的Intent里面是不是只设置了extra数据,而没有添加其他action、category、datauri用于区别来源。

另外PendingIntent的第四个参数flags也需要引起我们的注意:

FLAG_CANCEL_CURRENT:

如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

FLAG_NO_CREATE:

如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返null。

FLAG_ONE_SHOT:

该PendingIntent只作用一次,如果该PendingIntent对象已经触发过一次,那么下次再获取该对象并且再触发时,系统将会返回一个SendIntentException,在使用这个标志的时候一定要注意哦。

FLAG_UPDATE_CURRENT:

如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。这个非常有用,例如之前提到的,我们需要在每次更新之后更新Intent中的Extras数据,达到在不同时机传递给MainActivity不同的参数,实现不同的效果。


2、关于Android HttpURLconnection获取ContentLength 的隐藏问题

(CTWAP网络环境下HTTP的GET方法获取网络数据时返回Content-Length与实际下载数据大小不一致)

问题分析

问题的诱因锁定为“ctwap/ctnet”和“获取ContentLength的方式”

经过抓包分析,当客户端用HttpURLconnection获取数据并且请求头RequestMethod为GET的时候,ctwap/ctnet网关会对数据进行过滤处理,进行Gzip压缩,而android apk包默认是Zip压缩格式,由 于Gzip压缩比高于Zip,导致网关对apk包压缩处理后,length会小于原先值,最后导致客户端通过HttpURLconnection.getContentLength()获取的length比apk实际大小要小。

解决方案

<1>获取ContentLength的时候,请求头RequestMethod设置成“HEAD”,这样网关不会对body进行Gzip压缩计算大小,而是直接返回原始大小。

<2>通过返回头ContentRange字段获取ContentLength信息,可作为临时替代方案,稳定性较差



>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();