- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个已启动的前台服务。我已经注意从 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/
我正在关注 Android guide在媒体播放器应用程序中使用 MediaBrowserServiceCompat,但该服务在应用程序退出时被销毁。
我使用System.Windows.Window.IsActive来检测窗口是否位于前台,并且在某些情况下有效。但我发现了一些情况,它没有,我想知道是否有任何方法可以检测到它。 最佳答案 除非仅后台进
我需要为 EditText 的一部分设置样式。我希望文本为白色,背景为灰色。看起来很简单,但事实并非如此。 spanRange.setSpan(new BackgroundColorSpan(Colo
我决定在一个帖子中发布两个问题,因为这是完全相同的问题。 我需要知道屏幕何时打开或关闭,以便我可以打开 LED。第二个我需要知道我的应用程序是在后台还是在前台,以便在应用程序处于后台时管理在某些操作上
关于双高红色录音状态栏有很多问题( here , here ),但是当应用程序退出到后台时,所有这些问题都引用闪烁。我得到了一个闪光,我假设来自 AVCaptureSession设置,而应用程序在前台
我有一个奇怪的案例。我的 swift ios 应用程序已连接到 Cloudkit。如果应用程序未运行(后台状态),我每次都会收到通知徽章和警报!如果应用程序正在运行,则不会收到任何通知!我知道它没有击
我是 firebase 和 android 的新手,我想在我的应用程序中包含实时聊天。但我对 firebase 有以下疑问。请帮忙。 1) 如果应用程序在前台,系统托盘中是否会有默认通知,还是我必须在
我正在为 Excel 编写 VSTO 加载项,我注意到,如果我锁定工作表并使用密码保护它(因此只有我的加载项可以写入它,但用户可以查看它),如果用户尝试编辑工作表时,他们收到“此工作表已锁定”弹出窗口
我正在开发一个 iOS 应用程序,此应用程序允许其用户添加他稍后必须执行的任务。完成添加此任务后,它将发送到服务器以保存在服务器端。现在我对某些情况感到困惑:我的用户在输入任务详细信息时有什么电话..
我正在阅读内存不足 (OOM) killer ,以及 Android 如何确定进程的优先级 (https://developer.android.com/guide/components/proces
我已经在我的新应用程序中启动了一项服务。该服务是前台的,带有通知。当它在 AVD 2.1 API Level 7 中运行时,一切正常。但是当它在运行 Gingerbread 的 Samsung Gal
我的 Laravel 应用程序的结构需要帮助。 我想要的基本上是这个结构: 应用程序接口(interface) 管理面板 公共(public)网站 我开始构建我认为非常正确的文件夹结构: app/
我正在尝试用 CardView 填充我的 RecyclerView,CardView 使用 Android 数据绑定(bind)来设置属性,例如 TextView 中的文本。在未完成喷射的项目上,我想
我想使用 Window Script Host(WSH) 查找当前事件(具有焦点)的窗口的标题,因为我希望我的 WSH 脚本仅在所需窗口处于事件状态时才发送键。 注意*我无法使用替代方案,即在调用 s
如何调试 react-scripts 启动? 这工作正常,我不知道发生了什么变化(我没有改变任何东西) 看来 react-scripts start 无法作为前台进程继续运行。 我的 Dockerfi
我想制作像endonmondo那样的秒表。当我们启动应用程序时,它应该计算时间并更新主 Activity 中的textView(实际上它是一个 fragment )。 我做了后台服务(如 here )
我遇到了一个需求,但我无法获得正确的实现方式,因此需要您的帮助。 我想做什么? - 我想根据收到的通知执行操作,如下所示: 当应用程序打开并位于前台时,即对用户可见并且我收到通知时,我只是显示一个弹出
在 Android 10 中,我注意到我从操作系统收到一条 Toast 消息,说明“此 NFC 标签不支持应用程序”或“此 NFC 标签不支持应用程序”(取决于设备): 奇怪的是,我在 enableR
我是一名优秀的程序员,十分优秀!