當前位置:編程學習大全網 - 源碼下載 - 如何啟動壹個被home的android應用程序

如何啟動壹個被home的android應用程序

Android系統的Home應用程序Launcher是由ActivityManagerService啟動的,而ActivityManagerService和PackageManagerService壹樣,都是在開機時由SystemServer組件啟動的,SystemServer組件首先是啟動ePackageManagerServic,由它來負責安裝系統的應用程序,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析,系統中的應用程序安裝好了以後,SystemServer組件接下來就要通過ActivityManagerService來啟動Home應用程序Launcher了,Launcher在啟動的時候便會通過PackageManagerServic把系統中已經安裝好的應用程序以快捷圖標的形式展示在桌面上,這樣用戶就可以使用這些應用程序了,整個過程如下圖所示:

下面詳細分析每壹個步驟。

Step 1. SystemServer.main

這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 1。

Step 2.?SystemServer.init1

這個函數是壹個JNI方法,實現在?frameworks/base/services/jni/com_android_server_SystemServer.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 2。

Step 3.?libsystem_server.system_init

函數system_init實現在libsystem_server庫中,源代碼位於frameworks/base/cmds/system_server/library/system_init.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 3。

Step 4.?AndroidRuntime.callStatic

這個函數定義在frameworks/base/core/jni/AndroidRuntime.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 4。

Step 5.?SystemServer.init2

這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 5。

Step 6.?ServerThread.run

這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 6。

Step 7. ActivityManagerService.main

這個函數定義在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:

[java]?view plaincopy

public?final?class?ActivityManagerService?extends?ActivityManagerNative?

implements?Watchdog.Monitor,?BatteryStatsImpl.BatteryCallback?{?

......?

public?static?final?Context?main(int?factoryTest)?{?

AThread?thr?=?new?AThread();?

thr.start();?

synchronized?(thr)?{?

while?(thr.mService?==?null)?{?

try?{?

thr.wait();?

}?catch?(InterruptedException?e)?{?

}?

}?

}?

ActivityManagerService?m?=?thr.mService;?

mSelf?=?m;?

ActivityThread?at?=?ActivityThread.systemMain();?

mSystemThread?=?at;?

Context?context?=?at.getSystemContext();?

m.mContext?=?context;?

m.mFactoryTest?=?factoryTest;?

m.mMainStack?=?new?ActivityStack(m,?context,?true);?

m.mBatteryStatsService.publish(context);?

m.mUsageStatsService.publish(context);?

synchronized?(thr)?{?

thr.mReady?=?true;?

thr.notifyAll();?

}?

m.startRunning(null,?null,?null,?null);?

return?context;?

}?

......?

}?

這個函數首先通過AThread線程對象來內部創建了壹個ActivityManagerService實例,然後將這個實例保存其成員變量mService中,接著又把這個ActivityManagerService實例保存在ActivityManagerService類的靜態成員變量mSelf中,最後初始化其它成員變量,就結束了。

Step 8.?PackageManagerService.main

這個函數定義在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 7。執行完這壹步之後,系統中的應用程序的所有信息都保存在PackageManagerService中了,後面Home應用程序Launcher啟動起來後,就會把PackageManagerService中的應用程序信息取出來,然後以快捷圖標的形式展示在桌面上,後面我們將會看到這個過程。

  • 上一篇:數字貨幣基金有哪些2022
  • 下一篇:如何用c語言作出有圖形界面的小程序
  • copyright 2024編程學習大全網