Season 5 ep 1 介绍了Android系统中线程与UI渲染一些最基础的知识。
link


Main Thread

主线程是Android中最重要的线程,承担了响应系统时间、处理输入、绘制UI等重要任务。


UI drawing and frame dropping

出于简化的考虑,android系统将大部分任务都放在了主线程中进行。然而其中一个任务是与其它有所不同的 —— UI 渲染。因为UI渲染一旦出现卡顿,用户会立刻感知到ANR,极不友好。下面我们模拟一个输入并处理的过程,看一下冗长的操作是如何阻塞UI绘制的。

My Awesome Code!!!

人眼能感知的流畅UI界面必须保持在60fps,意味着每16ms就要有一次绘制完成。

一旦主线程被某个操作阻塞超过了16ms,势必会丢掉(至少)一次绘制,这就是 dropping frame。


Solve frame dropping

解决上述问题的思路很简单:既然主线程必须保证流畅运行,那我们就在自己的worker thread里处理这些恼人的Lame Work(瘸腿工作)好了。

我们可以直接使用以下几种由系统提供的解决方案,注意它们不同的应用场景。


Be Careful!

当你决定使用内部类来完成上述操作时,一定要注意这可能引起内存泄漏!因为非静态内部类实例会保存外部类的引用,而在移动系统这种内存有限的设备上,内存泄漏是非常可怕的。

一个解决方案是用静态内部类替代,并且内部以WeakReference保存Activity的引用。


===Ending===