Android 后台任务(一)概述
翻译自:http://blog.stylingandroid.com/archives/833
转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/23949407
我们专注于提高界面美化和用户体验。其中很重要的一点就是当用户点击/触摸界面上某个元素的时候没有反应,这会让用户感到灰心。
Android是多线程的。当Android 应用启动的时候,系统为应用程序创建了一个主线程。当你用debug模式运行你的程序的时候,你可以看见:
主线程很重要,因为靠他来处理UI事件。当用户触摸屏幕,任何触摸或者点击事件都会发生在UI线程中。这就是为什么通常我们管他叫UI线程的原因。而对于我个人而言,我更倾向于叫它UI线程,因为从字面就知道他用来处理UI事件。
我们用这个线程来处理UI事件,如果这个事件处理话费很长的事件,那么后面接下来的一些列UI事件都不会被处理,直到这个处理事件完成之后。对于用户来说就好像这个程序没有反应了。当一个UI线程处理事件超过5秒(或者在BroadcastReceiver中10秒),Android将会抛出“AndroidNot Responding”(ANR)对话框,用户可以选择退出你的程序。对于用户来说这真是太糟糕了,很多时候可能都会卸载掉你的程序。
所以关键就在于尽量的让你的UI 线程as free as possible。不管什么时候,我们在UI线程中处理事件的时候都应该尽快的完成。若果这个时候我们确实有一些耗时操作,我们可以考虑在其他的线程中处理这些事情,这样我们就可以尽量做到让UI线程as free as possible。
我们必须知道一件事,Activity生命周期里面的所有方法都是在UI线程中执行的。所以我们不要再里面处理耗时操作,比如像在onCreate中处理网络请求等。
有个问题就是,我们怎么知道UI线程中有耗时操作。幸运的是,Android API 9为我们提供了StrictMode,他会提示我们潜在的问题。这个用法很简单,大家可以参考我的其他文章来了解他的使用。我建议在测试的时候开启StrictMode来检测潜在的问题。但是请记住在你发布你的程序之前移除StrictMode。
希望你明白为什么我们要尽量的让UI线程as free as possible。接下来我们将会介绍怎么来做。