【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、判定當前線程是否是主線程
- 二、子線程中執行主線程方法
- 三、主線程中執行子線程方法
一、判定當前線程是否是主線程
在 Android 中 , 如果要判定當前線程是否是主線程 , 可以使用如下方法進行判定 ;
調用 Looper 的 getMainLooper() 靜態方法獲取 mainLooper , 調用 Looper 的 myLooper() 靜態方法獲取 myLooper , 對比二者是否相等 ;
Looper.getMainLooper() 方法獲取的總是本進程的主線程 Looper 對象 ;
Looper.myLooper() 方法獲取的是當前 Looper 線程的 Looper 對象 ,
如果當前線程是主線程 , 那么這兩個 Looper 對象是相同的 ;
// 判斷當前線程是否是主線程// 獲取 mainLooper 與 myLooper 進行比較 , 如果一致 , 說明該線程是主線程boolean isMainThread = false;// 下面的情況下 , 線程是主線程if (Looper.getMainLooper() == Looper.myLooper()) {isMainThread = true;}二、子線程中執行主線程方法
獲取主線程的 Looper , 通過 Looper 創建對應的 Handler , 然后通過該 Handler 向其發送 Runnable 任務即可 ;
一個線程只能有一個 Looper 和 MessageQueue , 但是可以有多個 Handler ;
其中 MessageQueue 封裝在 Handler 中 ;
// 將訂閱方法放到主線程執行// 獲取主線程 Looper , 并通過 Looper 創建 HandlerHandler handler = new Handler(Looper.getMainLooper());// 在主線程中執行訂閱方法handler.post(new Runnable() {@Overridepublic void run() {invokeMethod(subscription, event);}});三、主線程中執行子線程方法
可以直接創建 Thread 線程并執行 ;
也可以創建 ExecutorService 線程池 , 執行線程任務 ;
/*** 線程池*/private final ExecutorService executorService = Executors.newCachedThreadPool();// 在線程池中執行方法executorService.execute(new Runnable() {@Overridepublic void run() {invokeMethod(subscription, event);}});總結
以上是生活随笔為你收集整理的【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【EventBus】事件通信框架 ( 订
- 下一篇: 【EventBus】事件通信框架 ( 发