日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

通過實例解析android Activity啟動過程

瀏覽:24日期:2022-09-22 13:17:01

注:只是說明啟動activity的過程(ActivityThread如何與ActivityManagerService簡稱AmS進行進程間通信調用全過程),不解析android從zygote(受精卵)到整個系統服務的啟動

具體來講,啟動activity的方式有以下幾種:

在應用程序中startActivity()或startActivityForResult()方法啟動指定activity 在HOME(桌面)程序中單擊應用圖標,啟動新的activity 按'BACK'鍵結束當前activity,自動啟動上一個activity 長按“Home”鍵,顯示出當前任務列表,從中選擇一個啟動。

先分析第2種方式

android的HOMe桌面程序(launcher)是android系統啟動的第一個應用程序,其他的應用程序安裝后,會在launcher上創建一個快捷圖標,我們點擊桌面上的快捷圖標就會啟動相應的app

桌面程序Launcher.java(源碼基于4.2.2,我沒有下載4.2.2,參考網上源碼)

在android4.0packagesappsLauncher2srccomandroidlauncher2

當點擊一個應用圖標時會執行一連串流程

-》Launcher.onClick(View v)單擊app圖標

-》Launcher.startActivitySafely(v,intent,tag)這里比4.0多的一個參數,可能性能優化吧

-》Launcher.startActivity(v, intent,tag)

-》Activity.startActivity(intent,opts.toBundle())

-》Activity.startActivityForResult(intent,-1,options);

到這里直接跳轉到第一個問題上來了(直接分析第一個就可以解決第二個)

第4種方式---長按“Home”鍵,顯示出當前任務列表,從中選擇一個啟動

流程:

public static final int KEYCODE_HOME = 3;PhoneWindowManager.interceptKeyBeforeDispatching()處理長按home事件showRecentAppsDialog();//彈出近期任務的對話框 RecentApplicationsDialog.onclick.getContext().startActivity(intent);//到這里流程就相同了

這個調用的其實也是第1種的startActivity()。所以1,2,4可以用相同處理流程解析,在后面接紹第1中方式處理流程-----fly

第3種方式(原理與第1種大致相同)

假設一個app,ActivityA啟動ActivityB,然后ActivityB按下'BACK'鍵其實執行的是activity的finish()方法

簡單流程:

ActivityB.finish() Activity.finish() ActivityManagerNative.getDefault().finishActivity() ActivityManagerService.finishActivity() ActivityStack.requestFinishActivityLocked() ActivityStack.finishActivityLocked() ActivityStack.startPausingLocked()

ActivityB向AmS發送finish()請求

// If the activity is PAUSING, we will complete the finish once// it is done pausing; else we can just directly finish it here.

上面解釋。AmS會先會在ActivityStack.finishActivityLocked()方法中檢查我們要finish的activity的狀態是否處于pause狀態,如果是將直接執行finish操作,否則,必須先執行startPausingLocked()---這里終點是resume恢復上一個ActivityA,將A顯示在前臺窗口

IApplicationThread.schedulePauseActivity() ActivityThread.schedulePauseActivity() ActivityThread.sendMessage() ActivityThread.H.sendMessage() ActivityThread.H.handleMessage() ActivityThread.handlePauseActivity() ActivityThread.performPauseActivity() Instrumentation.callActivityOnPause() Activity.performPause() Activity.onPause() ActivityManagerNative.getDefault().activityPaused() ActivityManagerService.activityPaused() ActivityStack.activityPausedLocked() ActivityStack.completePauseLocked()

接上面,AmS通知當前ActivityB進入Paused狀態,當ActivityB進入paused狀態后即Activity.onPause()方法執行完后,通知AmS我已經執行完pause操作。于是AmS就準備要在ActivityB所在的進程和任務中恢復ActivityA了;

ActivityStack.resumeTopActivityLocked() ActivityStack.resumeTopInnerLocked() IApplicationThread.scheduleResumeActivity() ActivityThread.scheduleResumeActivity() ActivityThread.sendMessage() ActivityTherad.H.sendMessage() ActivityThread.H.handleMessage() ActivityThread.H.handleResumeActivity() Activity.performResume() Activity.performRestart() Instrumentation.callActivityOnRestart() Activity.onRestart() Activity.performStart() Instrumentation.callActivityOnStart() Activity.onStart() Instrumentation.callActivityOnResume() Activity.onResume()

到這里activityA已經啟動起來了,但是ActivityB還沒有被finish掉,在ActivityThread.H.handleResumeActivity中會

調用Looper.myQueue().addIdleHandler(new Idler()) 這個方法實現ActivityB的最終銷毀操作

Looper.myQueue().addIdleHandler(new Idler()) ActivityManagerNative.getDefault().activityIdle() ActivityManagerService.activityIdle() ActivityStackSupervisor.activityIdleInternalLocked() ActivityStack.destroyActivityLocked() IApplicationThread.scheduleDestoryActivity() ActivityThread.scheduleDestoryActivity() ActivityThread.sendMessage() ActivityThread.H.sendMessage() ActivityThread.H.handleMessage() ActivityThread.handleDestoryActivity() ActivityThread.performDestoryActivity() Activity.performStop() Instrumentation.callActivityOnStop() Activity.onStop() Instrumentation.callActivityOnDestory() Activity.performDestory() Acitivity.onDestory() ActivityManagerNative.getDefault().activityDestoryed() ActivityManagerService.activityDestoryed() ActivityStack.activityDestoryedLocked()

這就是finish()的全部流程了(具體與WindowsManagerService的交互以后再補充)

第1種方式--ActivityA啟動ActivityB為例

從startActivity()開始分析。

簡單流程(有時間完整過一遍源碼)

Activity.startActivityActivity.startActivityForResultInstrumentation.execStartActivityActivityManagerProxy.startActivityActivityManagerService.startActivityActivityStack.startActivityMayWaitActivityStack.startActivityLockedActivityStack.startActivityUncheckedLockedActivityStack.resumeTopActivityLockedActivityStack.startPausingLockedApplicationThreadProxy.schedulePauseActivityApplicationThread.schedulePauseActivityActivityThread.queueOrSendMessageH.handleMessageActivityThread.handlePauseActivityActivityManagerProxy.activityPausedActivityManagerService.activityPausedActivityStack.activityPausedActivityStack.completePauseLockedActivityStack.resumeTopActivityLokcedActivityStack.startSpecificActivityLockedActivityStack.realStartActivityLockedApplicationThreadProxy.scheduleLaunchActivityApplicationThread.scheduleLaunchActivityActivityThread.queueOrSendMessageH.handleMessageActivityThread.handleLaunchActivityActivityThread.performLaunchActivityAcitiviyB.onCreate

要查看ActivityManagerNative.java,ActivityManagerProxy.java,ActivityManagerService,還有binder關系看一張圖就可以了

通過實例解析android Activity啟動過程

從圖中可以看出代理類:使用ActivityManagerProxy代理類,來代理ActivityManagerNative類的子類ActivityManagerService;

所以執行請求都是傳遞到ActivityManagerService進行處理

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久黄色影院| 在线视频日韩| 日本视频在线一区| 欧洲一区二区三区精品| 五月激情久久| 免费精品国产| 亚洲男人在线| 国产精品久久久网站| 国产一区二区精品福利地址| 日韩在线高清| 三级一区在线视频先锋| 国产三级一区| 久久久精品网| 免费在线观看一区二区三区| 午夜性色一区二区三区免费视频| 91成人福利| 精品国产不卡一区二区| 亚洲福利久久| 久久精品72免费观看| 日本欧美国产| 国产视频一区在线观看一区免费| 日日夜夜免费精品视频| 国产日韩一区二区三区在线| 中文字幕在线免费观看视频| 久久福利精品| 九九久久国产| 国产精品婷婷| 久久超级碰碰| 99国产精品| 国内自拍视频一区二区三区| 国产一区成人| 国产精品xxxav免费视频| 日本国产精品| 国产精品一线| 亚洲少妇在线| 日韩av在线播放网址| 玖玖精品视频| 伊伊综合在线| 日韩av不卡在线观看| 亚洲第一区色| 麻豆精品在线| 少妇精品久久久一区二区三区| 精品视频91| 亚洲午夜免费| 久久精品二区三区| 国产精品片aa在线观看| 欧美日韩第一| 青青伊人久久| 亚洲欧美日韩一区在线观看| 国产一区二区色噜噜| 少妇精品久久久一区二区三区| 色偷偷色偷偷色偷偷在线视频| 色综合视频一区二区三区日韩 | 在线亚洲人成| 欧美欧美黄在线二区| 不卡在线一区| 精品三区视频| 国产精品永久| 日本精品一区二区三区在线观看视频| 1000部精品久久久久久久久| 国产精品毛片aⅴ一区二区三区| 91久久在线| 91精品蜜臀一区二区三区在线 | 岛国精品一区| 国产毛片久久久| 在线一区视频| 米奇777超碰欧美日韩亚洲| 97精品国产一区二区三区| 国产精品国产三级在线观看| 亚洲精品黄色| 亚洲午夜黄色| 日韩电影免费网站| 久久精品一区二区三区中文字幕| 日韩精品视频在线看| 蜜臀av国产精品久久久久| 99免费精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产精品手机在线播放| 免费欧美在线视频| 中文一区在线| 欧美专区一区二区三区| 午夜国产一区二区| 亚洲性视频h| 亚洲精品97| 中文久久精品| 蜜芽一区二区三区| 亚洲性色视频| 欧美亚洲国产精品久久| 久久久国产亚洲精品| 成人片免费看| 欧美羞羞视频| 久久高清免费| 国产精品7m凸凹视频分类| 国产一区亚洲| 欧美日韩国产亚洲一区| 一区视频在线| 黄色国产精品| 亚洲伊人精品酒店| 日韩国产在线不卡视频| 欧美午夜网站| 国产精品videossex久久发布| 久久国产乱子精品免费女| 国产午夜一区| 国产一区二区三区精品在线观看 | 日本va欧美va瓶| 91成人在线网站| 久久麻豆视频| 欧美天堂视频| 日韩精品首页| 黄色日韩在线| 亚洲精品自拍| 欧美激情aⅴ一区二区三区| 久久精品免费看| 999久久久亚洲| 天海翼精品一区二区三区| 日本在线不卡视频| 美女免费视频一区| 91精品国产成人观看| 日韩影院免费视频| 国产精品毛片aⅴ一区二区三区| 麻豆极品一区二区三区| 日韩欧美一区二区三区在线观看 | 91精品福利观看| 国产一区二区三区国产精品| 国产在线日韩| 久久国产精品免费一区二区三区| 国产精品最新| 91精品一区国产高清在线gif| 视频一区国产视频| 久久成人高清| 欧美在线影院| 国产日韩欧美在线播放不卡| av在线资源| 亚洲精品精选| 日韩欧美字幕| 婷婷精品在线| 日韩在线精品| 欧美在线精品一区| 欧美日韩尤物久久| 日韩一区网站| 91精品xxx在线观看| 水野朝阳av一区二区三区| 麻豆精品av| 亚洲在线一区| 国产精品99一区二区三区| 丝瓜av网站精品一区二区| 久久这里只有精品一区二区| 伊人影院久久| 成人精品久久| 日韩不卡一区二区| 亚洲精品一区三区三区在线观看| 日韩精品中文字幕一区二区| 日韩精品一卡| 国产精品欧美三级在线观看 | 亚洲国产一区二区三区在线播放| 7777精品| 美女国产一区| 四虎4545www国产精品| 国产调教精品| 水蜜桃久久夜色精品一区的特点| 国产成年精品| 欧美一区影院| 噜噜噜久久亚洲精品国产品小说| 久久精品欧洲| 日韩 欧美一区二区三区| 极品裸体白嫩激情啪啪国产精品| 麻豆精品在线播放| 日本免费一区二区视频| 激情五月综合网| 黑森林国产精品av| 国产情侣一区在线| 亚洲精品女人| 久久性天堂网| 欧美日韩高清| 中文另类视频| 国内在线观看一区二区三区| 啪啪亚洲精品| 亚洲免费福利一区| 99国产精品视频免费观看一公开 | 久久这里只有| 国产亚洲字幕| 亚洲3区在线| 日韩中文字幕亚洲一区二区va在线 | 国产精久久久| 日韩精品免费观看视频| 亚洲神马久久| 好吊视频一区二区三区四区| 日韩高清成人| 国产传媒在线| 国产成年精品| 福利一区二区三区视频在线观看| 日本色综合中文字幕| 亚洲精品动态| 日韩精品久久理论片| 日韩精品1区2区3区| 日韩和欧美一区二区三区| 日韩精品视频中文字幕| 日本欧美韩国一区三区| 日韩不卡在线观看日韩不卡视频| 亚洲精品影视|