关于android ListView倒计时遇到的一些问题



马自达电商项目已经开发接近尾声马上进行提测了,近期遇到一个说大不小,说小但也令人纠结的一个问题,今天终于解决,记录一下避免以后走弯路

首页一共四个倒计时,结构为 Activity-->Fragment--><LinearLayout>-->PulltoRefreshListView-->GridView

问题一:

每个item开了一个倒计时来更新自己,每次更新自己使用notifyDataSetChanged()来更新全部列表,以达到显示更新倒计时目的,但是每个item都调用一次 notifyDataSetChanged这个方法导致界面一直在刷新,界面卡死,用户无法操作

解决方法

给显示倒计时的控件设置一个全局变量,并进行引用,每次更新的时候局部刷新即可,不用每次都全部刷新整个列表

问题二:

执行倒计时的多个线程一直在执行,不管是否已在本页或已经退出应用(很浪费内存)

解决方法:试着利用fragment的onstart()  onstop()的生命周期 ,设置一个开关定时器标签,并在定时器执行线中程进行判断来达到控制定时器停止,开启

小问题1:经过长时间的测试发现pulltoRefreshListView 控件在Activity--Fragment--Pulltorefresh这种结构下面 在绑定完数据源以后 再更新数据的时候getView()不执行

解决方法:因为时间问题没有办法解决上面bug  所以换成XListView

小问题2:虽然换成XListVIew解决了上述getView()不执行的问题,但是在fragment的onStop()生命周期下还是不执行getView()

解决方法:既然无法通过执行getView()传值给里面的listview来控制定时器的执行,可以通过定时器在执行时候顺便获取一个存在固定位置的值并判断自己是否要继续执行,只需要在执行生命周期的时候更改相应的值,即可停止相应定时器,避免高内存的持续占用

问题三:

由于定时器是在最内层GridView的adapter中,所以每次执行getVIew的时候便会启动一个定时器,而在解决问题一的时候又引出更新倒计时显示每次给固定变量设置值的时候执行getView(),然后再次启动一个线程中的定时器,结果自然是线程和定时器翻倍增长。线程和定时器多了,并且用户一直在这个界面不操作的话会导致内存急剧升高。

解决方法:

在每次启动定时器的时候,给当前显示倒计时的控制设置一个tag 此标签作用为指示本控件是否绑定了一个定时器,如果绑定了就不再启动定时器。再结合convetView的复用,完美解决了定时器会多次启动的问题


值此 主导开发的马自达电商项目问题已基本解决,等提测修复bug上线了,做个标记






马自达电商项目已经开发接近尾声马上进行提测了,近期遇到一个说大不小,说小但也令人纠结的一个问题,今天终于解决,记录一下避免以后走弯路

首页一共四个倒计时,结构为 Activity-->Fragment--><LinearLayout>-->PulltoRefreshListView-->GridView

问题一:

每个item开了一个倒计时来更新自己,每次更新自己使用notifyDataSetChanged()来更新全部列表,以达到显示更新倒计时目的,但是每个item都调用一次 notifyDataSetChanged这个方法导致界面一直在刷新,界面卡死,用户无法操作

解决方法

给显示倒计时的控件设置一个全局变量,并进行引用,每次更新的时候局部刷新即可,不用每次都全部刷新整个列表

问题二:

执行倒计时的多个线程一直在执行,不管是否已在本页或已经退出应用(很浪费内存)

解决方法:试着利用fragment的onstart()  onstop()的生命周期 ,设置一个开关定时器标签,并在定时器执行线中程进行判断来达到控制定时器停止,开启

小问题1:经过长时间的测试发现pulltoRefreshListView 控件在Activity--Fragment--Pulltorefresh这种结构下面 在绑定完数据源以后 再更新数据的时候getView()不执行

解决方法:因为时间问题没有办法解决上面bug  所以换成XListView

小问题2:虽然换成XListVIew解决了上述getView()不执行的问题,但是在fragment的onStop()生命周期下还是不执行getView()

解决方法:既然无法通过执行getView()传值给里面的listview来控制定时器的执行,可以通过定时器在执行时候顺便获取一个存在固定位置的值并判断自己是否要继续执行,只需要在执行生命周期的时候更改相应的值,即可停止相应定时器,避免高内存的持续占用

问题三:

由于定时器是在最内层GridView的adapter中,所以每次执行getVIew的时候便会启动一个定时器,而在解决问题一的时候又引出更新倒计时显示每次给固定变量设置值的时候执行getView(),然后再次启动一个线程中的定时器,结果自然是线程和定时器翻倍增长。线程和定时器多了,并且用户一直在这个界面不操作的话会导致内存急剧升高。

解决方法:

在每次启动定时器的时候,给当前显示倒计时的控制设置一个tag 此标签作用为指示本控件是否绑定了一个定时器,如果绑定了就不再启动定时器。再结合convetView的复用,完美解决了定时器会多次启动的问题


值此 主导开发的马自达电商项目问题已基本解决,等提测修复bug上线了,做个标记





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值