当前位置: 首页 > news >正文

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...

相关文章:

  • NumPy 数组排序
  • 【Zephyr 系列 28】MCU 闪存文件系统详解:LittleFS + NVS + 块设备设计实战
  • Mybatis踩坑之一天
  • Kafka 原理与核心机制全解析
  • 【unitrix】 4.1 类型级加一操作(Add1.rs)
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本
  • Qt项目,记事本
  • windows桌面连接ubuntu, 设置VNC
  • BERT 模型准备与转换详细操作流程
  • 科学计算库 Numpy
  • 软件工程核心知识全景图:从需求到部署的系统化构建指南
  • 【AI智能体】Spring AI MCP 服务常用开发模式实战详解
  • 命令行中SSH本地端口转发和反向远程端口转发
  • 计算机网络课程设计--基于TCP协议的文件传输系统
  • linux VFS简介
  • 笔式胰岛素简单拆解
  • SAP金属行业解决方案:无锡哲讯科技助力企业数字化转型与高效运营
  • P99延迟:系统性能优化的关键指标
  • 408考研逐题详解:2010年第3题——后序线索二叉树
  • Docker容器自动更新利器:Watchtower
  • 什么都不会怎么做网站/seo关键词排名优化系统源码
  • 幸福人寿保险公司官方网站/营销网站建设培训学校
  • 工程造价信息期刊/免费seo培训
  • 网站设计包括/免费推广的网站平台
  • 专业企业网站建设多少钱/2022最近十大的新闻热点
  • 河北省建设项目环保备案网站/营销客户管理系统