自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android應用程序消息處理機制(Looper、Handler)分析(10)

移動開發(fā) Android
應用程序的主線程準備就好消息隊列并且進入到消息循環(huán)后,其它地方就可以往這個消息隊列中發(fā)送消息了。我們繼續(xù)以文章開始介紹的Android應用程序啟動過程源代碼分析一文中的應用程序啟動過為例,說明應用程序是如何把消息加入到應用程序的消息隊列中去的。

應用程序的主線程準備就好消息隊列并且進入到消息循環(huán)后,其它地方就可以往這個消息隊列中發(fā)送消息了。

我們繼續(xù)以文章開始介紹的Android應用程序啟動過程源代碼分析一文中的應用程序啟動過為例,說明應用程序是如何把消息加入到應用程序的消息隊列中去的。

在Android應用程序啟動過程源代碼分析這篇文章的Step 30中,ActivityManagerService通過調(diào)用ApplicationThread類的scheduleLaunchActivity函 數(shù)通知應用程序。

它可以加載應用程序的默認Activity了,這個函數(shù)定義在frameworks/base/core/java/android /app/ActivityThread.java文件中:

  1.   [java] view plaincopypublic final class ActivityThread { 
  2.   ...... 
  3.   private final class ApplicationThread extends ApplicationThreadNative { 
  4.   ...... 
  5.   // we use token to identify this activity without having to send the 
  6.   // activity itself back to the activity manager. (matters more with 
  7. ipc) 
  8.   public final void scheduleLaunchActivity(Intent intent, IBinder token, int 
  9. ident, 
  10.   ActivityInfo info, Bundle state, List pendingResults, 
  11.   List pendingNewIntents, boolean notResumed, boolean isForward) 
  12.   ActivityClientRecord r = new ActivityClientRecord(); 
  13.   r.token = token; 
  14.   r.ident = ident; 
  15.   r.intent = intent; 
  16.   r.activityInfo = info; 
  17.   r.state = state; 
  18.   r.pendingResults = pendingResults; 
  19.   r.pendingIntents = pendingNewIntents; 
  20.   r.startsNotResumed = notResumed; 
  21.   r.isForward = isForward; 
  22.   queueOrSendMessage(H.LAUNCH_ACTIVITY, r); 
  23.   } 
  24.   ...... 
  25.   } 
  26.   ...... 
  27.   } 

這里把相關(guān)的參數(shù)都封裝成一個ActivityClientRecord對象r,然后調(diào)用queueOrSendMessage函數(shù)來往應用程序的消息隊 列中加入一個新的消息(H.LAUNCH_ACTIVITY),這個函數(shù)定義在frameworks/base/core/java/android /app/ActivityThread.java文件中:

  1. [java] view plaincopypublic final class ActivityThread { 
  2. ...... 
  3. private final class ApplicationThread extends ApplicationThreadNative { 
  4. ...... 
  5. // if the thread hasn't started yet, we don't have the handler, so just 
  6. // save the messages until we're ready. 
  7. private final void queueOrSendMessage(int what, Object obj) { 
  8. queueOrSendMessage(what, obj, 00); 
  9. ...... 
  10. private final void queueOrSendMessage(int what, Object obj, int arg1, int 
  11. g2) { 
  12. synchronized (this) { 
  13. ...... 
  14. Message msg = Message.obtain(); 
  15. msg.what = what; 
  16. msg.obj = obj; 
  17. msg.arg1 = arg1; 
  18. msg.arg2 = arg2; 
  19. mH.sendMessage(msg); 
  20. ...... 
  21. ...... 

 

責任編輯:閆佳明 來源: bbs.9ria
相關(guān)推薦

2014-05-22 14:57:28

Android消息處理機制Looper

2014-05-22 15:15:53

Android消息處理機制Looper

2014-05-22 15:18:25

Android消息處理機制Looper

2014-05-22 15:33:31

Android消息處理機制Looper

2014-05-22 15:41:59

Android消息處理機制Looper

2014-05-22 15:38:27

Android消息處理機制Looper

2014-05-22 15:00:16

Android消息處理機制Looper

2014-05-22 15:04:00

Android消息處理機制Looper

2014-05-22 15:07:44

Android消息處理機制Looper

2014-05-22 15:48:50

Android消息處理機制Looper

2011-04-28 11:01:40

Android消息處理LooperHandler

2011-11-23 09:33:45

HandlerLooperMessage

2014-05-27 10:13:57

移動技術(shù)半月刊

2016-10-21 13:03:18

androidhandlerlooper

2011-09-05 17:40:40

MTK定時器

2011-03-17 09:20:05

異常處理機制

2021-08-12 16:28:10

AndroidHandleLooper

2023-03-08 08:54:59

SpringMVCJava

2023-06-15 14:09:00

解析器Servlet容器

2014-05-27 15:09:13

AndroidActivitysingleTask
點贊
收藏

51CTO技術(shù)棧公眾號