gpt4 book ai didi

java - 粘性前台服务无法重新启动并出现 "process is bad"错误

转载 作者:IT老高 更新时间:2023-10-28 20:54:14 25 4
gpt4 key购买 nike

我有一个已启动的前台服务。我已经注意从 onStartCommand 返回 START_STICKY。我观察到前台服务不会无限期地运行,而是会被称为 RestartProcessManager 的 Android 内部模块定期终止。本质上,一个进程 LRU 得到维护,如果新终止的服务被配置为这样做(粘滞与否),它会再次被调度。

我面临的问题是如何处理重启。 Logcat 表示服务 Intent 正在传递,但由于“进程错误”

而失败

在搜索其他来源后,我被引导相信我的服务中存在内存泄漏。为了验证这一说法,我创建了一个普通的前台服务,除了在同一应用程序中的 onStartCommand 期间记录一条语句之外什么都不做。这也观察到了同样的问题。

在一个新项目中尝试了完全相同的事情(显然使用了新的包名称)并且服务重新启动工作得非常好。此外,我通过单击 studio->logcat 下的红色十字按钮来模拟重启(这实际上会终止进程)。无论如何,这次服务 Intent 成功传递,服务再次启动并运行。我认为这可能是我的项目中的一些依赖项可能会以某种方式搞砸。我在新项目中复制了依赖项,它继续按预期工作。

现在这就是荒谬的地方。我在错误的项目中更改了包名称,并且不再遇到问题。我已经解决了这个问题,因为我花了将近 2 天的时间来诊断这个问题,但是更改包名称对我来说是不可行的,因为我的应用程序已经发布了。

Edit-1:我必须提到,我目前在运行 Oreo(一加 5)的设备上观察到了这一点

Edit-2:该服务与应用程序在同一进程中运行。我也包含了 logcat 转储。

02-15 14:26:50.850  1395  1445 D RestartProcessManager: updateSelf :  com.ambee, size : 30
02-15 14:26:50.852 1395 1445 D RestartProcessManager: com.ambee got score 26.17240489145331 in DayDuration for duration : 525176
02-15 14:26:50.853 1395 1445 D RestartProcessManager: com.ambee got score 99.80218232889891 in DayLRU for LRU diff : 47707034
02-15 14:26:50.853 1395 1445 D RestartProcessManager: com.ambee got score 90.9090909090909 in DayLaunchTimes for launch times : 10
02-15 14:26:50.854 1395 1445 D RestartProcessManager: com.ambee : X : 2727.272727272727, Y : 785.1721467435993, Z : 2994.0654698669673
02-15 14:26:51.082 1395 1445 I ActivityManager: Killing 13839:com.ambee/u0a260 (adj 200): [BgDetect][RNK] kill com.ambee (uid 10260) usage 4
02-15 14:26:51.083 1395 1445 D ActivityManager: Process com.ambee has 1 services
02-15 14:26:51.083 1395 1445 W ActivityManager: Scheduling restart of crashed service com.ambee/.vson.LinkService in 10996ms
02-15 14:26:51.084 1395 1445 D EmbryoManager: prepare com.ambee user 0
02-15 14:26:51.099 3710 3710 D NotificationListener: onNotificationRemoved# hash: 68226270 sbn: StatusBarNotification(pkg=com.ambee user=UserHandle{0} id=903 tag=null key=0|com.ambee|903|null|10260: Notification(channel=default pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x72 color=0x00000000 actions=2 vis=PRIVATE))
02-15 14:26:54.121 1395 1444 I ActivityManager: Start proc 22570:com.ambee/u0a260 for embryo com.ambee
02-15 14:26:54.121 1395 1444 D Embryo_Uterus: Embryo created.com.ambee, pid=22570
02-15 14:26:54.796 22570 22570 D Embryo : preload com.ambee, 10ms, hwui=true, layout=false, decor=false
02-15 14:27:02.084 1395 1445 W ActivityManager: Unable to launch app com.ambee/10260 for service Intent { cmp=com.ambee/.vson.LinkService }: process is bad
02-15 14:27:04.214 1395 1444 D Embryo_Uterus: rank:63, com.ambee, 35767806

最佳答案

对于您的服务的普通版本,请考虑以下几点:

1- 卸载您的应用2-重新启动您的设备3-重新安装您的 Vanilla 服务版本以仅记录。

它应该可以工作。

对于您的前台服务,请考虑使用 stopSelf 或 stopService 方法,而不是 stopForegroundService 方法。 stopForegroundService 只是停止服务成为前台。它不会阻止它成为后台服务。它会一遍又一遍地重新启动,如果您的服务在 5 秒内崩溃或无法完成工作,那么操作系统会一遍又一遍地终止您的服务,最终您的服务将被列入操作系统黑名单。

关于java - 粘性前台服务无法重新启动并出现 "process is bad"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com