工作笔记 11


开始使用 工作区域去多屏幕切换
linux super+s
win10 开启 Win + Ctrl + D  关闭Win + Ctrl + F4  切换 Win + Ctrl + D +左/右
win tab 显示所有任务栏、工作区

Android中 
android只允许一个线程绘制UI。比如在activity的oncreate方法中沉睡了线程则会影响了 ui绘图时间
UI 操作通常会通过投递消息来实现,只有往正确的 Looper 投递消息才能得到处理,实现绘图,对于 UI 来说,这个 Looper 一定是运行在 UI 线程中。
消息需要在 Looper 中处理,Looper 又需运行在 Thread 中,所以不能随随便便在非 UI 线程中进行 UI 操作。

在哪个线程创建Handler 就使用那个线程的looper

作为所有控件基类的 view 提供了 post 方法,用于向 UI Thread 发送消息,并在 UI Thread 的 Looper 中处理这些消息,而 UI Thread  一定有 Looper 这是由 ActivityThread 来保证的:
    public final class ActivityThread {  
    ...  
        final Looper mLooper = Looper.myLooper();  
    }  

在我们写的main ACtivity中 会在此开辟一个真正的UI线程 ActivityThread (真正的UI线程,重要性也不言而喻)

在其中生成了 mLooper 
final Looper mLooper = Looper.myLooper();  且在activity源码中使用到了 Looper.myLooper() != mMainThread.getLooper();
最后 ActivityThread.java 的 main() 方法 中进行了   Looper.loop();  循环。

猜测: 对于不同activity来讲 所使用的ActivityThread是同一个,ActivityThread是单例,

完整流程
ActivityThread 定义了 looper ------view父类使用这个looper,创建了mHandler,post了消息  return attachInfo.mHandler.post(action);
最后----ActivityThread,做了loop()循环,在loop()循环中更新了试图。

 Android实战简易教程-第六十七枪(android动画实现窗口抖动效果) 
view 20992行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章