編輯:關於Android編程
Activity的啟動;
Intent intent = new Intent(this,A.class);
startActivity(intent);
startActivity方法有好幾種加載方式 但是最終都會調用startActivityForResult方法
注意; mMainThread.getApplication 的類型是 ApplicationThread 類型。
ApplicationThread 是ActivityThread 一個內部類。
ApplicationThread 與ActivityThread 在Activity 啟動過程中發揮著很重要的作用。
通過以上代碼可以看出 Activity的真正啟動是通過 ActivityManagerNative.getDefault().startActivity(….) 方法啟動,
ActivityManagerService extends ActivityManagerNative;
ActivityManagerNative extends Binder implements IActivityManager
而 ActivityManagerNative.getDefault() 其實是一個IActivityManager 類型的Binder 因此具體的 startActivity的實現是在 ActivityManagerService中實現的。
而ActivityManagerService 這個Binder對象 是一個單例模式
第一次調用get時會調用create方法創建改對象,之後則返回之前創建的對象。
通過上述分析 Activity的啟動是通過ActivityManagerNative.getDefault().start(…) 啟動,進而轉化為 ActivityManagerService 中。
可以看出 startActivity 的啟動流程又轉移到了 ActivitySupervisor中的startActivityMayWait中,
接著 startActivityMayWait中調用了 StartActivityLocked ,startActivityLocked 緊接著調用了 startActivityUncheckedLocked ,然後 startActivityUnCheckLocked 調用了
ActivityStack 類中的resumeTopActivitiesLocked 方法
在 resumeTopActivityLocked方法中 調用了 resumeTopActivityInnerLocked方法, 而 resumeTopActivityInnerLocked方法中 又調用了
ActivityStackSupervisor 中的 startSpecificActivityLocked方法。
在 startSpecificActivityLocked 方法中又調用了 realStartActivityLocked方法
在ActivityStartSupervisor以及 ActivityStack 中 的調用流程
在 realStartActivityLocked 中又調用了scheduleaunchActivity 方法
改方法 :
而 app.thread 的類型為 IApplicationThread 改接口中主要是實現了大量的Activity以及service 啟動停止相關的功能
那麼 IApplicationThread 接口的實現是什麼呢?
答案就是ActivityThread 的內部類ApplicationThread 中實現了IApplicationThread
可以看出 ApplicationThread 實現了 ApplicationThreadNative 而 ApplicationThreadNative 繼承 Binder 同時實現了 IApplicationThread
繞了一圈 可以看出 activity的啟動最終還是需要 ApplicationThread 來實現。
在ApplicationThread 中 通過scheduleLaunchActivity 方式實現。
而 內部的實現很簡單 就是發送一個啟動Activity的Handle 來解決
接著 看一些 接受 消息的 Handler H
從 H類中可以看出 activity的啟動 是通過handleLaunchActivity 來實現的。
從以上代碼可以看出 performLaunchActivity 方法 最終完成 Activity 對象的創建和 啟動
performLaunchActivity 的主要作用
1:從ActivityClientRecord中 獲取待啟動的Activity組件信息
2:通過 Instrumentation 的newActivity方法使用類加載器去創建Activity對象
3:通過LoadedApk的makeApplication 方法去嘗試創建Application
通過上述代碼可以看出
如果Application已經被創建了那麼就不會再去創建,這樣就保證了一個應用只有一個Application
4: 創建 ContextImpl 對象並通過Activity的Attach方法去完成一些重要數據的初始化
5: 調用Activity的onCreate 方法。
至此 Activity 啟動。
導語官方文檔:https://developer.android.com/training/articles/security-ssl.htmlHttps使用了數字簽名,
首先推薦一下鴻洋大大的打造個性的圖片預覽與多點觸控視頻教程,這套教程教我們一步一步實現了多點觸控實現對圖片的平移和縮放的功能,這篇文章我將在鴻洋大大的基礎之上做了一些擴展
其實對於接觸過Android開發的人來說,視圖的滑動並不陌生,因為這一功能特性可以說是隨處可見。常用的就例如ScrollView、HorizontalScrollView
圖書目錄:第1章 開始啟程,你的第一行Android代碼 1.1 了解全貌,Android王國簡介 1.1.1 Android系統架構 1.1.2 Andro