Android14 app被冻结导致进程间通信失败

软件平台:Android14

硬件平台:QCS6115

问题:设备开机阶段,由于系统资源紧张,触发了非前台进程的freez机制,导致前台进程与之交互出现binder交互异常,而展示白屏。

先从异常日志着手吧:

java 复制代码
	行 11804: 05-19 12:00:00.015573  2102  2153 D OomAdjuster: App adj change from previous state to cached state : 4077 com.fenbi.megrez.app.launcher
	行 11805: 05-19 12:00:00.019909  2102  2153 D OomAdjuster: Yfd_cleanUpApp -> App com.fenbi.megrez.app.launcher[pid:4077] adj change to 900 in OomAdjuster 3119 line,why adj changed : updateOomAdj_allowlistChange
	行 11811: 05-19 12:00:00.023163  2102  2153 D OomAdjuster: Yfd_cleanUpApd -> 4077, com.fenbi.megrez.app.launcher adj 900: previous-expired
	行 12160: 05-19 12:00:10.065895  2102  2233 D ActivityManager: freezing 4077 com.fenbi.megrez.app.launcher
	行 12162: 05-19 12:00:10.074886  2102  2233 I am_freeze: [4077,com.fenbi.megrez.app.launcher]
	行 12168: 05-19 12:00:10.536406  2102  2233 I am_compact: [4077,com.fenbi.megrez.app.launcher,ANON,229928,178604,48884,19892,-26332,0,-26332,26332,460,SOME,0,900,15,102216,-7544]
	行 12249: 05-19 12:00:13.181501  1499  1499 I BpBinder: onLastStrongRef automatically unlinking death recipients: 
	行 12286: 05-19 12:00:13.241860  2828  2828 I [wpa_su][0x36aedee3f][04:00:13.233464] wlan: [2828:I:OSIF] osif_cm_disconnect_sync: vdevid-0: Received Disconnect reason:3 REASON_DEAUTH_NETWORK_LEAVING
	行 12345: 05-19 12:00:13.303463  2828  2828 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid=c6:47:4e:ec:4b:68 reason=3 locally_generated=1
	行 12346: 05-19 12:00:13.311311  2828  2828 I wpa_supplicant: wlan0: CTRL-EVENT-DSCP-POLICY clear_all
	行 12348: 05-19 12:00:13.314904  2828  2828 I BpBinder: onLastStrongRef automatically unlinking death recipients: android.hardware.wifi.supplicant.ISupplicantStaNetworkCallback
	行 12353: 05-19 12:00:13.334659  2828  2828 I wpa_supplicant: wlan0: CTRL-EVENT-DSCP-POLICY clear_all
	行 12354: 05-19 12:00:13.335349  2828  2828 I wpa_supplicant: nl80211: deinit ifname=wlan0 disabled_11b_rates=0
	行 12363: 05-19 12:00:13.340920  2828  2828 I BpBinder: onLastStrongRef automatically unlinking death recipients: android.hardware.wifi.supplicant.ISupplicantStaIfaceCallback
	行 12415: 05-19 12:00:13.409117  2828  2828 I wpa_supplicant: Terminating...
	行 12457: 05-19 12:00:13.429504  2102  2124 W SupplicantStaIfaceHalAidlImpl: ISupplicant binder died. who=android.os.BinderProxy@287a6e7, service=android.os.BinderProxy@287a6e7
	行 12459: 05-19 12:00:13.438924     1     1 I init    : Service 'wpa_supplicant' (pid 2828) exited with status 0 oneshot service took 662.900024 seconds in background
	行 12460: 05-19 12:00:13.439056     1     1 I init    : Sending signal 9 to service 'wpa_supplicant' (pid 2828) process group...
	行 12461: 05-19 12:00:13.440215     1     1 I libprocessgroup: Successfully killed process cgroup uid 0 pid 2828 in 0ms
	行 12484: 05-19 12:00:13.464077  2102  2702 I WifiNative: Successfully torn down Iface:{Name=wlan0,Id=0,Type=STA_CONNECTIVITY}
	行 12564: 05-19 12:00:13.553771  4050  4050 I binder  : 4050:4050 transaction failed 29202/0, size 376-16 line 3807
	行 12568: 05-19 12:00:13.545969  4050  4050 E JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 376)
	行 12574: 05-19 12:00:13.550866  2102  2153 D OomAdjuster: Yfd_cleanUpApp -> App com.fenbi.megrez.app.launcher[pid:4077] adj change to 700 in OomAdjuster 3119 line,why adj changed : updateOomAdj_allowlistChange
	行 12577: 05-19 12:00:13.551139  2102  2153 D OomAdjuster: Yfd_cleanUpApd -> 4077, com.fenbi.megrez.app.launcher adj 700: cch-ui-provider
	行 12578: 05-19 12:00:13.551425  2102  2153 D ActivityManager: pid 4077 com.fenbi.megrez.app.launcher received sync transactions while frozen, killing
	行 12579: 05-19 12:00:13.551583  2102  2153 I ActivityManager: Killing 4077:com.fenbi.megrez.app.launcher/u0a54 (adj 700): Sync transaction while in frozen state
	行 12581: 05-19 12:00:13.551744  2102  2153 I am_kill : [0,4077,com.fenbi.megrez.app.launcher,700,Sync transaction while in frozen state]
	行 12627: 05-19 12:00:13.655843  4283  4283 I binder  : 2102:4283 transaction failed 29202/0, size 0-0 line 3807
	行 12672: 05-19 12:00:13.603490  4050  4050 I ActivityThread: Removing dead content provider:android.content.ContentProviderProxy@62d6169
	行 12695: 05-19 12:00:13.604147  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --dalvik.system.VMStack.getThreadStackTrace(Native Method)
	行 12696: 05-19 12:00:13.608858  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --java.lang.Thread.getStackTrace(Thread.java:1841)
	行 12697: 05-19 12:00:13.608969  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.ActivityThread.handleUnstableProviderDiedLocked(ActivityThread.java:7664)
	行 12698: 05-19 12:00:13.609226  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.ActivityThread.handleUnstableProviderDied(ActivityThread.java:7649)
	行 12699: 05-19 12:00:13.609322  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.ContextImpl$ApplicationContentResolver.unstableProviderDied(ContextImpl.java:3680)
	行 12701: 05-19 12:00:13.609459  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.content.ContentResolver.query(ContentResolver.java:1237)
	行 12702: 05-19 12:00:13.609561  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.content.ContentResolver.query(ContentResolver.java:1162)
	行 12703: 05-19 12:00:13.609645  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.content.ContentResolver.query(ContentResolver.java:1118)
	行 12704: 05-19 12:00:13.609729  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.megrez.share.data.impl.ShareDataService.c(Unknown Source:26)
	行 12705: 05-19 12:00:13.609848  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.kuiper.app.config.impl.q.b(Unknown Source:76)
	行 12706: 05-19 12:00:13.609930  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --l.e.a(Unknown Source:20)
	行 12707: 05-19 12:00:13.610016  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.kuiper.app.config.impl.e$a.invokeSuspend(Unknown Source:55)
	行 12708: 05-19 12:00:13.610100  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:11)
	行 12709: 05-19 12:00:13.610180  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --u4.o0.run(Unknown Source:122)
	行 12710: 05-19 12:00:13.610289  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --u4.w0.k(Unknown Source:153)
	行 12711: 05-19 12:00:13.610376  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --u4.f.c(Unknown Source:109)
	行 12712: 05-19 12:00:13.610457  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.kuiper.app.config.impl.e.a(Unknown Source:8)
	行 12713: 05-19 12:00:13.610540  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.vgo.frog.impl.klog.KLogger.log(Unknown Source:15)
	行 12714: 05-19 12:00:13.610623  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.kuiper.app.config.impl.k.f(Unknown Source:88)
	行 12715: 05-19 12:00:13.610734  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.kuiper.app.config.impl.k.e(Unknown Source:37)
	行 12716: 05-19 12:00:13.610818  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --c.a.b(Unknown Source:51)
	行 12717: 05-19 12:00:13.610895  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --c.a.a(Unknown Source:6)
	行 12718: 05-19 12:00:13.610977  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.yuanfudao.android.megrez.wifi.fragment.s2.fragment.WifiComponentInit$onAppInit$1.onReceive(Unknown Source:46)
	行 12719: 05-19 12:00:13.611065  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1802)
	行 12720: 05-19 12:00:13.611185  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$gDuJqgxY6Zb-ifyeubKeivTLAwk(Unknown Source:0)
	行 12721: 05-19 12:00:13.611285  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2)
	行 12722: 05-19 12:00:13.611370  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.os.Handler.handleCallback(Handler.java:958)
	行 12723: 05-19 12:00:13.611453  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.os.Handler.dispatchMessage(Handler.java:99)
	行 12724: 05-19 12:00:13.611571  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.os.Looper.loopOnce(Looper.java:205)
	行 12725: 05-19 12:00:13.611660  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.os.Looper.loop(Looper.java:294)
	行 12726: 05-19 12:00:13.611745  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --android.app.ActivityThread.main(ActivityThread.java:8228)
	行 12727: 05-19 12:00:13.611830  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --java.lang.reflect.Method.invoke(Native Method)
	行 12728: 05-19 12:00:13.611911  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
	行 12729: 05-19 12:00:13.612028  4050  4050 D ActivityThread: 000ActivityThread -- ↑ --com.android.internal.os.ZygoteInit.main(ZygoteInit.java:977)
	行 12730: 05-19 12:00:13.614087  2102  2155 I libprocessgroup: Successfully killed process cgroup uid 10054 pid 4077 in 54ms
	行 12734: 05-19 12:00:13.625713  2786  2786 D CollapsedStatusBarFragment: In BroadcastReceiver onReceive(),action is ---> android.net.conn.CONNECTIVITY_CHANGE
	行 12735: 05-19 12:00:13.626106  3845  3845 D yfdLogService: onReceive :android.net.conn.CONNECTIVITY_CHANGE
	行 12882: 05-19 12:00:13.668160  2102  4283 I ActivityManager: Process com.fenbi.megrez.app.launcher (pid 4077) early provider death
	行 12883: 05-19 12:00:13.668710  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --dalvik.system.VMStack.getThreadStackTrace(Native Method)
	行 12887: 05-19 12:00:13.668840  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --java.lang.Thread.getStackTrace(Thread.java:1841)
	行 12888: 05-19 12:00:13.668920  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --com.android.server.am.ContentProviderHelper.unstableProviderDied(ContentProviderHelper.java:947)
	行 12892: 05-19 12:00:13.669041  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --com.android.server.am.ActivityManagerService.unstableProviderDied(ActivityManagerService.java:6903)
	行 12896: 05-19 12:00:13.669117  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --android.app.IActivityManager$Stub.onTransact(IActivityManager.java:4082)
	行 12897: 05-19 12:00:13.669192  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2743)
	行 12898: 05-19 12:00:13.669297  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --android.os.Binder.execTransactInternal(Binder.java:1339)
	行 12899: 05-19 12:00:13.669373  2102  4283 W ContentProviderHelper: 000ActivityManager - ContentProviderHelper -- ↑ --android.os.Binder.execTransact(Binder.java:1275)
	行 12905: 05-19 12:00:13.670112  2102  4283 I am_proc_died: [0,4077,com.fenbi.megrez.app.launcher,700,14]
	行 12919: 05-19 12:00:13.674823  2102  4283 D ActivityManager: Yfd_cleanUpApp -> App com.fenbi.megrez.app.launcher[pid:4077] adj is -10000 ,will be cleanup in AMS 13143 line.
	行 13006: 05-19 12:00:13.695624  2102  4283 W ActivityManager: ProcessRecord{df38f75 0:com.fenbi.megrez.app.launcher/u0a54} is attached to a previous process 4077
	行 13119: 05-19 12:00:13.747324  2102  5255 D MediaSessionService: The MediaKeyEventSessionChangedListener (android.os.BinderProxy@4d887a1) is removed by com.android.bluetooth
	行 13444: 05-19 12:00:13.912480  2102  2954 D DisplayManagerService: Display listener for pid 4077 died.
	行 13445: 05-19 12:00:13.913050  2102  2125 I WindowManager: WIN DEATH: Window{1a56a06 u0 com.fenbi.megrez.app.launcher/com.yuanfudao.android.megrez.guide.component.activity.UserGuideActivity}
	行 13450: 05-19 12:00:13.914334  2102  2953 V ActivityManager: Got obituary of 4077:com.fenbi.megrez.app.launcher
 
 

这个问题的根源在于起始阶段AM对进程的冻结,而这个冻结的接口好像从Android10左右就有了,只是那个版本只添加了冻结的接口,逻辑上却并未调用,而14则实现了整体逻辑上的冻结调用,大概流程是,Android 14 之后,Google 明确提出了一个"缓存进程"和 "进程冻结" 相关的优化项,而且据代码所示:当 A 进程处于 freeze 状态时,B 进程通过同步 Binder 调用访问A 进程的数据时,AMS 会直接Kill掉A进程,因此以上应用被kill。

尝试过通过把该进程的OOM级别主动降低,发现在极端情况下依然没效果,最终尝试在AM对进程进行冻结时,针对该进程添加一个过滤操作,如果是该进程则直接return,不执行以后的freeze操作;

改动如下:

java 复制代码
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -95,6 +95,7 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
+import android.xxx.util.xxxProcessChecker;
 
 public final class CachedAppOptimizer {
 
@@ -2351,6 +2352,14 @@ public final class CachedAppOptimizer {
             final ProcessCachedOptimizerRecord opt = proc.mOptRecord;
 
             synchronized (mProcLock) {
+                // we just ignore freeze some process
+                if (xxxProcessChecker.getInstance().checkIfAppInProcessWhiteList(name,
+                        "CachedAppOptimizer.java line 2358.")){
+                    Slog.d(TAG_AM, "Skipping freeze for process " + pid
+                            + " " + name + "(ignore)");
+                    return;
+                }
+
                 // someone has canceled this freeze
                 if (!opt.isPendingFreeze()) {
                     return;

添加的内容逻辑就是对特定包名做过滤,从而实现不冻结的加白处理,这样的话该进程切后台也就不会因为前台进程与之进行数据同步而被kill了。

Mark...

相关推荐
Kapaseker9 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴36 分钟前
Android17 为什么重写 MessageQueue
android
阿巴斯甜21 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android