优化第三方应用被kill后接收广播自启

来源:互联网 发布:唯一网络被收购 编辑:程序博客网 时间:2024/06/05 11:38
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -921,6 +924,33 @@ public final class BroadcastQueue {
// restart the application.
}
+ // app not started, do not start if thirdpart app at these intents.
+ boolean disableKeepAlive = SystemProperties.getBoolean("persist.sys.disable_keepalive", true);
+ if (disableKeepAlive) {
+ String action = r.intent.getAction();
+ ApplicationInfo appInfo = info.activityInfo.applicationInfo;
+ Slog.d(TAG, "action "+action+" app:"+appInfo);
+ if (appInfo != null && (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ Slog.d(TAG, "Not system app!!! [" + action + "] app=" + app );
+
+ if (action.equals("android.net.conn.CONNECTIVITY_CHANGE") ||
+ action.equals("android.intent.action.BOOT_COMPLETED") ||
+ action.equals("android.intent.action.MEDIA_MOUNTED") ||
+ action.equals("android.intent.action.MEDIA_REMOVED") ||
+ action.equals("android.intent.action.TIME_TICK") ||
+ action.equals("android.intent.action.MEDIA_UNMOUNTED") ||
+ action.equals("android.intent.action.MEDIA_BAD_REMOVAL") ||
+ action.equals("android.intent.action.MEDIA_SHARED")
+ ) {
+ logBroadcastReceiverDiscardLocked(r);
+ finishReceiverLocked(r, r.resultCode, r.resultData,
+ r.resultExtras, r.resultAbort, false);
+ scheduleBroadcastsLocked();
+ r.state = BroadcastRecord.IDLE;
+ return;
+ }
+ }
+ }
// Not running -- get it started, to be executed when the app comes up.
if (DEBUG_BROADCAST) Slog.v(TAG,
"Need to start app ["