欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Android14 app被冻结导致进程间通信失败

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

2025/6/23 15:40:29 来源:https://blog.csdn.net/DKBDKBDKB/article/details/148827302  浏览:    关键词:Android14 app被冻结导致进程间通信失败

软件平台:Android14

硬件平台:QCS6115

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

先从异常日志着手吧:

行 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操作;

    改动如下:

--- 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 freezeif (!opt.isPendingFreeze()) {return;

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

Mark...

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词