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的引用。