android 后台服务多任务下载界面刷新机制

最近的一个项目中需要实现后台服务多任务下载,在前台界面显示进度。这就需要监听每一个下载任务的进度并不断的刷新界面的进度,但是因为我这个进度条界面会有很多的图片,然后每个下载任务都会发消息给界面处理,造成界面刷新非常的频繁,导致图片不能显示,并且会让界面非常卡。针对这种情况,我采用了两个办法有效解决了这个问题。

1、统一刷新界面

         因为多个任务都会不断的像界面发消息要求刷新界面,太过频繁。我的想法是统一处理,在handler处理消息的方法中,我通过时间进行判断,怎么实现呢?就是将上次处理的时间记录下来,然后如果后面接收到的消息与上次的消息时间差小于1000ms,我就直接返回,不对消息进行处理,这样就可以实现1000ms或者500ms统一刷新每个进度,而不是来一个消息就处理。

 

public void handleMessage(Message msg) {
   
   switch (msg.what) {
   case UPDATA:
    if(System.currentTimeMillis() - lastUpdatedTime > UPDATE_GAP){   //判断时间差
     update(downingList);     //更新数据的逻辑
     lastUpdatedTime = System.currentTimeMillis();    //记录下处理消息的时间
    }
    break;

}

 

2、通过集合记录下要刷新的控件

       前台显示进度的界面可能有很多加载比较耗时的图片等元素,但是我们实际需要更新的可能就只是progressbar或者text等控件,这样我们就不必要每次都adapter.notifyDataSetChanged(),这样如果有过多图片加载会比较慢,或者就可能出现图片不能显示的问题,因为所有图片加载可能就需要1000或500ms,还没等图片加载完,又再一次执行刷新操作,这样我们就看不到图片了。要解决这个问题很简单,我们可以将要更新的控件通过map集合保存,然后刷新的时候取出来只刷新需要刷新的控件,这样就能完美解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值