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

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

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

瀏覽:26日期: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久久,三上悠亚国产精品一区二区三区
99精品视频在线| 9色精品在线| 日韩高清一区二区| 国产午夜精品一区二区三区欧美 | 国产精品中文字幕亚洲欧美| 亚洲精品美女| 日本va欧美va瓶| 国产欧美高清视频在线| 欧美另类中文字幕 | 热久久久久久| 国产精品日韩精品中文字幕| 欧美激情综合| 精品视频一二| 久久久一二三| 99国产精品私拍| 综合激情婷婷| 国产精品一国产精品k频道56| 国产精品免费精品自在线观看| 欧美1区2区3| 日韩激情一区| 黄色成人在线网址| 少妇高潮一区二区三区99| 国产日韩在线观看视频| 国产一区二区精品久| 99国产精品免费视频观看| 视频一区二区中文字幕| 四虎成人精品一区二区免费网站| 日韩成人精品一区二区三区 | 亚洲综合不卡| 日韩av一区二区三区| 精品久久久中文字幕| 久久国产欧美| 亚洲天堂av资源在线观看| 国产亚洲一区| 日本午夜大片a在线观看| 99在线|亚洲一区二区| 欧美亚洲人成在线| 久久婷婷亚洲| 日本不卡不码高清免费观看| 国产精品一区三区在线观看| 激情黄产视频在线免费观看| 亚洲欧美日本国产专区一区| 国产精品亚洲综合在线观看| 久久一级电影| 97久久中文字幕| 韩国三级一区| 日韩黄色在线观看| 群体交乱之放荡娇妻一区二区| 免费不卡在线观看| 精品国产乱码久久久久久1区2匹| 亚洲精品网址| 美女久久久久久| 欧美网站在线| 国产精品男女| 欧美高清不卡| 欧美91在线|欧美| 在线综合亚洲| 日韩av有码| 日韩欧美四区| 免费不卡中文字幕在线| 国产精品大片免费观看| 国产国产精品| 麻豆国产精品| 在线看片一区| 久久久久99| 国产图片一区| 久色成人在线| 人人精品亚洲| 精品一区二区三区在线观看视频| 欧美在线影院| 国产精选在线| 91福利精品在线观看| 五月天激情综合网| 国产一区二区三区四区大秀 | 欧美在线日韩| 亚洲成人一区| 国产成人精选| 日本色综合中文字幕| 精品日韩毛片| 日韩成人免费| 国产精品最新| 日韩精品一二三四| 91精品国产福利在线观看麻豆| 国产精品日本一区二区三区在线| 野花国产精品入口| 韩国精品主播一区二区在线观看| 国产日产精品_国产精品毛片 | 日韩中文av| 亚洲特级毛片| 国产成人久久精品一区二区三区| 日本99精品| 亚洲天堂av资源在线观看| 国产一区二区三区自拍| 国产一区2区在线观看| 青草国产精品久久久久久| 99在线精品免费视频九九视| 国产夫妻在线| 美女视频免费精品| 91精品丝袜国产高跟在线| 亚洲综合三区| 好吊日精品视频| 欧美三级网址| 日本一区二区高清不卡| 老司机免费视频一区二区| 欧美一区91| 日韩综合小视频| 免费国产亚洲视频| 亚洲深夜影院| 午夜日韩在线| 激情欧美一区二区三区| 欧美成人基地| 天堂8中文在线最新版在线| 国产999精品在线观看| 国产精品久久免费视频| 欧美日韩一区二区三区不卡视频 | 久久久人人人| 一本大道色婷婷在线| 精品久久97| 国产一区二区三区免费在线| 精品三级久久久| 国语精品一区| 日本不良网站在线观看| 捆绑调教日本一区二区三区| 精品国产乱码久久久| 国产不卡人人| 日韩精品一区二区三区免费观影 | 日韩在线麻豆| 日韩精品亚洲专区| 日产欧产美韩系列久久99| 亚洲+小说+欧美+激情+另类| 婷婷精品在线| 午夜久久av| 欧美久久亚洲| 免费亚洲一区| 成人在线视频中文字幕| 一区二区精品伦理...| 日韩中文字幕高清在线观看| 欧美.日韩.国产.一区.二区| 日韩视频在线一区二区三区| 久久高清一区| 日韩国产在线不卡视频| 国产精品极品国产中出| 精品视频网站| 久久中文字幕二区| 久久不射网站| 久久激五月天综合精品| 久久av电影| 日韩一区亚洲二区| 夜夜精品视频| 日本亚洲视频| 精品视频黄色| 久久久久免费av| 丝袜a∨在线一区二区三区不卡| 日韩一区二区三免费高清在线观看 | 高清av不卡| 激情婷婷欧美| 三级欧美在线一区| 日韩动漫一区| 97精品国产| 免费视频国产一区| 综合干狼人综合首页| 国产精品草草| 亚洲国产专区| 欧美视频精品全部免费观看| av中文资源在线资源免费观看| 欧美 日韩 国产精品免费观看| 亚洲青青久久| 国产一区三区在线播放| 亚洲免费黄色| 国产精品天天看天天狠| 久久精品成人| 婷婷综合成人| 9999国产精品| 亚洲人成高清| 91免费精品| 色8久久久久| av高清不卡| 亚洲精品婷婷| 成人片免费看| 日韩一区二区三区高清在线观看| 成人在线免费观看网站| 免费久久99精品国产自在现线| 国产欧美激情| 日韩午夜高潮| 高清精品久久| 亚洲精品日本| 视频福利一区| 777久久精品| 一本一本久久| 日韩电影免费在线观看| 日韩区欧美区| 欧美日韩国产亚洲一区| 久久99精品久久久野外观看| 日韩午夜电影| 国产精品专区免费| 97精品国产99久久久久久免费| 久久中文视频| 国产一区二区三区免费在线| 婷婷视频一区二区三区| 亚洲一级高清|