簡體   English   中英

在Android上識別獨立服務

[英]Identifying Stand-Alone Services on Android

我試圖找出是否有一種方法可以區分進程是應用程序還是獨立服務(即,不是本地服務,而是在自己的進程中運行的服務)。

我正在使用ActivityManager.getRunningAppProcesses來獲取正在運行的應用程序進程,也正在使用ActivityManager.getRunningServices來獲取正在運行的服務(不幸的是,不贊成使用getRunningTasks API)。

當我比較兩者的結果時,我發現兩者中有許多相同的進程名稱和ID(pid)。

對於那些進程名稱也存在於RunningAppProcesses派生的列表中的服務,我必須假定這些服務是駐留在應用程序進程中的本地服務(如果我在此假設中錯了,請告訴我)。

似乎唯一了解進程是否為獨立服務的方法是獲取兩個列表,然后從服務進程列表中刪除所有ID與應用程序列表中的PID匹配的列表。 結果將為我提供獨立服務。

有沒有更簡單的方法來獲取此信息?

您應該只能通過ActivityManager.getRunningServices 這是一個應該告訴您結果中的每個RunningServiceInfo是否具有自己的過程的方法。 (為避免每次都獲得PackageManager,它也會傳入)。

private boolean serviceHasDifferentProcess(PackageManager pm, RunningServiceInfo rsi) throws PackageManager.NameNotFoundException {
    ComponentName cn = rsi.service;
    String pn = cn.getPackageName();
    PackageInfo pi = pm.getPackageInfo(pn, 0);
    ApplicationInfo ai = pi.applicationInfo;

    String serviceProcessName = rsi.process;
    String appProcessName = ai.processName;

    return serviceProcessName.equals(appProcessName);
}

進程可以托管不同的Android組件。 在清單中,您告訴Android將每個組件放入哪個進程。 如果需要,您可以讓Android為每個Activity,Service,BroadcastReceiver和ContentProvider創建一個單獨的進程。 您還可以有一個承載某些服務和某些活動的流程,以及另一個承載其他服務和活動的流程。

因此,您的問題實際上沒有答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM