android下载并使用Notification
工作有个需求,需要做应用内升级,流程无碍乎检测版本,下载,调用系统安装程序安装。
重点在下载这一块,使用http下载程序,断点续传,分段下载这类的功能就不细说了,简单的说就是http请求时在header中加入一个参数,值为下载文件偏移位置,服务器会从这个位置开始传送数据。
现在下载的常规做法是使用notification来显示下载进度与状态,响应点击事件来暂停,停止下载任务。
notification我使用的是NotificationCompat.Builder。在Android3.0之后,一般推荐使用Notification.Builder。由于我们的应用需要照顾到2.x的用户,所以是用NotificationCompat.Builder。NotificationCompat.Builder如何使用就不细说了,可以自己搜下。
重点说下我使用了setProgress(100, percentage, false)这个方法来显示进度条,第一个参数是设置一个进度条总数,第二个参数进度条进度的位置,例如一半是50,第三个参数没调查有什么用。如果去掉进度条第一参数和第二个参数传入0就去掉了进度条。另外:小图标,使用setSamllIcon()方法设置;标题,使用setContentTitle()方法设置;文本内容,使用setContentText()方法设置。这三个参数必须设置,否则通知显示不出来。
使用下载并且更新notification进度条的进度。问题出现了,手机特别卡,今本上是卡死的状态,知道下载完成。不知道出现了什么问题,大量测试后得出结论:
1:下载写入文件需要使用 RandomAccessFile这个类来完成等,多数人使用断点续传和分段下载一定使用的是RandomAccessFile这个类,因为这个类有个seek方 法。
2:每次需要更新notification的进度的时候不能每次都new Notification.Builder,然后根据id来更新notification,发现new Notification.Builder比较消耗资源,所以需要把Notification.Builder对象作为类的成员变量,在下载开始或者类构造的时候就把Notification.Builder对象new出来,避免使用局部变量。
做完这两项,发现不卡了,通知栏上下滑动很顺畅了。
浙公网安备 33010602011771号