restartPackage && sharedUserId="android.uid.shared”

我们的任务管理器去关闭一个task,用到的方法是  android.app.ActivityManager.restartPackage 。但是这里有一个不完善的地方就是,launcher和contacts都具有 android:sharedUserId="android.uid.shared” 属性。restartPackage 方法它会关掉与这个ap关联(同ID)的所有ap。

这里我去关掉cantacts,在log里可以看到,andorid会同时关掉launcher,输入法,还有acore进程:

 DEBUG/ActivityManager(53): Force removing process ProcessRecord{438a46d0 104:android.process.acore/10001} (android.process.acore/10001)
DEBUG/ActivityManager(53): Force removing process ProcessRecord{43897660 192:com.android.inputmethod.latin/10001} (com.android.inputmethod.latin/10001)

INFO/WindowManager(53): WIN DEATH: Window{43910d90com.android.contacts/com.android.contacts.DialtactsContactsEntryActivity paused=false}
INFO/WindowManager(53): WIN DEATH: Window{4379ea98com.android.launcher/com.android.launcher.Launcher paused=false}
INFO/Process(53): Sending signal. PID: 192 SIG: 9
DEBUG/ActivityManager(53):   Force finishing activitycom.android.contacts/.DialtactsContactsEntryActivity

 

 

我去看了一个写得比较好的类似软件,它在关contact的时候,lancher也是会被关掉的。但是我们不用去担心用户自己安装的程序也具有android:sharedUserId="android.uid.shared”属性,因为这样的程序只能在build整个系统时放进去(就是系统软件),手动安装是没有权限的。提示错误:

ERROR/PackageManager(53): Package XXXX has no signatures that match those in shared user android.uid.system; ignoring!

 

 

 

另外的关进程的方法,要去获得它的pid,再调用android.os.Process.killProcess(),但是killProcess里明确说明了:packages sharing a common UID will also be able to kill each other's processes.

android.process.acore 應該是一些基本功能的載入程序.
從 Source code 看來, 它應包含以下項目.
1. 聯絡人
2. Google search
3. Global search (不太明瞭它的功能)
4. 程式啟動列表 (就是主畫面下方可往上拉起的來的那鍋)
5. 應用程式清單資料庫處理元件 (Applications Provider)
6. 聯絡人資料庫處理元件 (Contact Provider)
7. Google 聯絡人資料庫處理元件 (Google Contact Provider)
8. 使用者自定詞彙資料庫處理元件 (User Dictionary Provider)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页