Android R 开机不允许部分APP自动重启

部分APP在任务列表中被杀死,但是开机后会自动重启,以下解决该问题

  1. 不允许自动重启列表配置:
    在frameworks/base下修改
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 0e2df09fe02c..be036ed03016 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -4367,4 +4367,10 @@
     <bool name="config_pdp_reject_enable_retry">false</bool>
     <!-- pdp data reject retry delay in ms -->
     <integer name="config_pdp_reject_retry_delay_ms">-1</integer>
+
+    <!-- modified by weitf (20220817) (Disallow Auto Start) start <<< -->
+    <string-array translatable="false" name="disallow_auto_start_list" >
+        <item>"bubei.tingshu"</item>
+    </string-array>
+    <!-- modified end <<< -->
 </resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 9564542d4717..d35f49663f74 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -4057,4 +4057,9 @@
   <java-symbol type="string" name="permgrouplab_phone" />
   <java-symbol type="string" name="permgrouplab_sms" />
   <!-- added end -->
+
+  <!-- modified by weitf (20220817) (Disallow Auto Start) start <<< -->
+  <java-symbol type="array" name="disallow_auto_start_list" />
+  <!-- modified end <<< -->
+
 </resources>
  1. 实现不自动重启功能:
    在frameworks/base下修改
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
old mode 100644
new mode 100755
index 2c123e06431a..cc704530973e
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -620,6 +620,11 @@ public class ActivityManagerService extends IActivityManager.Stub
     // we still create this new offload queue, but never ever put anything on it.
     boolean mEnableOffloadQueue;
 
+    // modified by elink_weitf (20220817) (Disallow Auto Start) start <<<
+    private String mCachePkg;
+    private static HashSet<String> mDisallowList;
+    // modified end <<<
+
     BroadcastQueue mFgBroadcastQueue;
     BroadcastQueue mBgBroadcastQueue;
     BroadcastQueue mOffloadBroadcastQueue;
@@ -3228,11 +3233,72 @@ public class ActivityManagerService extends IActivityManager.Stub
         }
     }
 
+    // modified by weitf (20220817) (Disallow Auto Start) start <<<
+    private void getDisallowAutoStartList() {
+        String[] disallowList = mContext.getResources().getSystem().getStringArray(com.android.internal.R.array.disallow_auto_start_list);
+        mDisallowList = new HashSet<>(Arrays.asList(disallowList));
+        Iterator iter = mDisallowList.iterator();
+        while(iter.hasNext()){
+            Slog.d(TAG, "weitf Disallow Auto Start getDisallowAutoStartList: item:"+(String)iter.next());
+        }
+    }
+
+    private final int getRunningProcessRecordIndex(String packageName) {
+        // Find the application record.
+        if(packageName == null){
+            return -1;
+        }
+        for (int i=mProcessList.mLruProcesses.size()-1; i>=0; i--) {
+            ProcessRecord rec = mProcessList.mLruProcesses.get(i);
+            if (rec.thread != null && packageName.equals(rec.processName)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    final boolean isDisallowAutoStart(ApplicationInfo info, String hostingType) {
+        if(mDisallowList == null){
+            getDisallowAutoStartList();
+        }
+        String launchPkg = info.packageName;
+        Slog.i(TAG, "weitf Disallow Auto Start name ["+launchPkg+"] isSystemApp: " + info.isSystemApp());
+        boolean isRunningApp = getRunningProcessRecordIndex(launchPkg) != -1;
+        if(isRunningApp){
+            Slog.d(TAG, "weitf Disallow Auto Start Launch: " + launchPkg  + " " + hostingType);
+            return false;
+        }
+        if(launchPkg.equals(mCachePkg)){
+            Slog.d(TAG, "weitf Disallow Auto Start Launch for cache: " + launchPkg  + " " + hostingType);
+            return false;
+        }
+        if ("service".equals(hostingType) || "broadcast".equals(hostingType) || "content provider".equals(hostingType)) {
+            if (mDisallowList.contains(launchPkg)) {
+                Slog.d(TAG, "weitf Disallow Auto Start intercept: " + launchPkg + "  " + hostingType + "  " + info.processName);
+                return true;
+            } else {
+                Slog.d(TAG, "weitf Disallow Auto Start allowed: " + launchPkg + "  " + hostingType + "  " + info.processName);
+                return false;
+            }
+        }
+        mCachePkg = launchPkg;
+        return false;
+    }
+    // modified end <<<
+
     @GuardedBy("this")
     final ProcessRecord startProcessLocked(String processName,
             ApplicationInfo info, boolean knownToBeDead, int intentFlags,
             HostingRecord hostingRecord, int zygotePolicyFlags, boolean allowWhileBooting,
             boolean isolated, boolean keepIfLarge) {
+        // modified by weitf (20220817) (Disallow Auto Start) start <<<
+        if (isDisallowAutoStart(info, hostingRecord.getType())) {
+               String launchPkg = info.packageName;
+               Slog.i(TAG, "weitf Disallow Auto Start name ["+launchPkg+"] isSystemApp: " + info.isSystemApp());
+               return null;
+        }
+        // modified end >>>
+
         return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,
                 hostingRecord, zygotePolicyFlags, allowWhileBooting, isolated, 0 /* isolatedUid */,
                 keepIfLarge, null /* ABI override */, null /* entryPoint */,
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值