Android培训之核心UI线程—离开返回的无缝衔接​

2016-03-02 13:30:43 478浏览

        作为Android开发者,我们都知道保持uI响应灵敏的重要性.因此开发者把类似I/0操作这样的耗时任务放在后台线程中执行:当后台线程执行完毕后,经常需要更新UI:Android可能与读者熟知的其他uI系统非常相似,并不是线程安全的:在修改任何ImageView之前,必须返回到应用程序主线程中,试图在主线程之外修改uI会导致异常。

        Android培训之核心UI线程—离开返回的无缝衔接

        初始实现代码使用的是AsyncTask的onPostExecute()方法:因为我们使用Executor代替AsyncTask,因此需要为宿主Activity准备一个Runnable对象:我们会用到Activity的runonu汀hread()方法,该方法会使用Handler在后台将我们的工作添加到u1的消息队列中:

        切换到uI线程是需要考虑的二读者必须注意下述几个方面:

        口如果用户滚动ListView,ImageView的实例有可能被回收

        口宿主Activity有可能在任务完成前已经被销毁

        因此,用于处理图片的Runnable的每一步都需要检查是否应该停止处理图片二如果宿主Activity使用ImageWorker的setExit,TasksEarly(1方法设置一个标记(flag),就可以检查到停止状态.该方法需要在onPause()方法中调用。此外,如果FutureTask的cancel()方法被调用,也可以检查到停止状态。

        注意事项

        对于产品级应用程序,Android官方文档的training小节建议使用更好的磁盘缓存解决方案。原始文档提供的实现方案缺少几个关键部分,为此,这里提供一个更完整的例子,修改磁盘缓存的实现代码,使其支持在应用程序重启时可以重建磁盘缓存,并且不再需要维护这部分代码的两份拷贝。

        加载图片等耗时T作需要在uI线程之外执行.这会使类似ListView这样的内置组件平滑运行。读者可以使用一个LIFO队列对加载图片的顺序进行微调,以此获得更好的用户体验。

        使用一个可能会生成无数实例的AsyncTask会导致潜在问题。使用executor可以更好地完成AsyncTask的工作。此外,Android开发在支持库中提供了一个稳定的LruCache实现,用于提供高效缓存解决方案。

 查看更多关于“Android培训资讯”的相关文章>>

标签:

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号