1
我試圖跟蹤應用程序是如何從開始安裝的,到目前爲止我已經能夠跟蹤源代碼,其中調用去了PackageManagerService,它擴展了PackageManager並調用該方法installPackageWithVerification()時,代碼如下所示以供參考,其中:上述瞭解Android應用程序的安裝過程PackageManagerService.installPackage
@Override
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
final int uid = Binder.getCallingUid();
final int filteredFlags;
if (uid == Process.SHELL_UID || uid == 0) {
if (DEBUG_INSTALL) {
Slog.v(TAG, "Install from ADB");
}
filteredFlags = flags | PackageManager.INSTALL_FROM_ADB;
} else {
filteredFlags = flags & ~PackageManager.INSTALL_FROM_ADB;
}
final Message msg = mHandler.obtainMessage(INIT_COPY);
msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
verificationURI, manifestDigest);
mHandler.sendMessage(msg);
}
代碼的最後3行創建一個消息處理程序對象和基本上封裝了包安裝PARAMS消息中併發送。我並不清楚消息的傳遞位置。
我去和調試基本上限定的sendMessage(該android.os.Handler),所有我能找到是該消息被添加到隊列本身使用android.os.MessageQueue
實例莫非有人親切地告訴我包裹旁邊會發生什麼?甚至是在NativeMessageQueue中入隊的消息。
在此先感謝!
在AOSP代碼中搜索'InstallParams',您會發現該位置。或者找出'mHandler'的來源以及'handleMessage'的實現位置。 – 323go
我明白了。 mHandler是服務本身定義的PackageHandler類(它擴展了android.os.Handler類)。正如我提到的android.os.Handler中的sendMessage方法將消息添加到MessageQueue。這就是我卡住的地方,無法弄清楚接下來會發生什麼! –
這就是你必須弄清'mHandler'來自何處的地方 - 這個'Handler'將處理你發送的消息。 – 323go