当前位置: 首页 > 知识库问答 >
问题:

Wierd-Android IntentService杀死我的应用程序的其余部分,但继续运行自己

慕阳文
2023-03-14

我有一个服务,它启动了一个经理类,要求从谷歌播放服务(即获得一个连接,然后调用Activity识别客户端通过一个PendingIntent请求ActivityUpdate())。

PendingEvent引用了一个实现了onHandleIntent(Intent)的IntentService,它只是将最可能的当前物理活动打印到日志中。

到现在为止,一直都还不错。一切正常——服务已绑定,管理器已连接,IntentService已启动,用户的体力活动已写入日志。

我希望它只是坐在后台,聆听活动更新,即使我的用户在“最近的应用”屏幕中关闭了UI活动。我已经在我的应用程序中使用了这种技术来更新位置——我的位置服务会一直跟踪位置,即使应用程序的UI部分被用户或系统破坏。

问题是,由于添加了这个新的活动识别内容,当用户杀死用户界面时,IntentService收到的下一个PendingIntent会杀死整个应用程序的其余部分,包括所有其他服务。一切停止/死亡/消失。但是没有警告,没有例外,没有日志条目,什么都没有!

唯一继续工作的是该死的意向服务!每次新的意图出现时,这种情况就像什么都没发生一样。

如果我在注册活动更新的地方注释掉代码(这样就不会使用PendingEvent,也不会调用IntentService),一切正常。

我不知道是什么导致了这次熔毁,日志中也没有任何线索。

我搜索了谷歌/SO,但我一片空白。我找不到任何人描述类似的行为。

那么,有没有另一种类型的Android组件能够由我可以尝试的意图而不是IntentService触发呢?IntentService真的是问题所在吗?活动识别不能在这样的背景下进行吗?我还可以尝试什么?

更新:当IntentService上的onHandleIntent()方法完成时,操作系统是否可能会杀死我应用程序中的所有线程,而不仅仅是为IntentService创建的线程?

这是日志里的内容。。。

--User is shutting down the App UI, but the Services are left running as intended...
19:41:12.146  13679-13679/tripcomputer I/tripcomputer.TripComputer? STOPPED TripComputer Activity: 1107344720
19:41:12.153  1258-4401/? W/ContextImpl? Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1244 android.content.ContextWrapper.sendBroadcast:365 com.motorola.motocare.util.TriggerHelper$TriggerBuilder.send:76 com.motorola.motocare.internal.frameworkevents.PauseResumeTrigger.handleFrameworkEvent:53 com.motorola.motocare.internal.frameworkevents.FwEventMonitor$FrameworkListener.processFrameworkEvent:114
19:41:12.645  13679-13679/tripcomputer I/tripcomputer.TripComputer? DESTROYING TripComputer Activity: 1107344720
19:41:12.646  13679-13679/tripcomputer I/tripcomputer.services.JourneyServiceConnectionManager? Activity 1107344720 is STOPPING the JourneyService...
19:41:12.652  13679-13679/tripcomputer I/tripcomputer.services.JourneyServiceConnectionManager? IGNORING request to STOP the JourneyService - Journey in progress.
19:41:12.655  13679-13679/tripcomputer I/tripcomputer.services.ActivityServiceConnectionManager? Activity 1107344720 is STOPPING the ActivityService...
19:41:12.657  13679-13679/tripcomputer I/tripcomputer.services.ActivityServiceConnectionManager? IGNORING request to STOP the ActivityService - Activity in progress.
19:41:12.659  13679-13679/tripcomputer I/tripcomputer.TripComputer? DESTROYED TripComputer Activity: 1107344720

--The UI has closed down sucessfully. 
--The next activity update arrives at the IntentService and gets printed...
19:41:19.703  13679-14095/tripcomputer I/tripcomputer.services.ActivityUpdateIntentService? The most probable user Activity is still (50)

--Then, the system kills the IntentService?
19:41:19.704      969-979/? I/ActivityManager? Killing 13679:tripcomputer/u0a152 (adj 0): remove task
19:41:19.706    1258-4401/? W/ContextImpl? Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1244 android.content.ContextWrapper.sendBroadcast:365 com.motorola.motocare.util.TriggerHelper$TriggerBuilder.send:76 com.motorola.motocare.internal.frameworkevents.ProcessKillTrigger.sendTrigger:147 com.motorola.motocare.internal.frameworkevents.ProcessKillTrigger.handleFrameworkEvent:164

--Boom!, everything else has gone but there's nothing in the Log
--System schedules the Crashed Services for restart
19:41:19.727     969-1273/? W/ActivityManager? Scheduling restart of crashed service tripcomputer/.services.JourneyService in 1000ms
19:41:19.736     969-1273/? W/ActivityManager? Scheduling restart of crashed service tripcomputer/.services.ActivityService in 1000ms

共有1个答案

华萧迟
2023-03-14

我最终找到了另一种有效的方法。。。

我在上面遇到的问题可能与IntentService线程的处理方式有关,但不幸的是,当IntentService的handleIntent方法完成时,我没有找到一个更具体的解释来解释运行中的应用程序完全丢失的原因。

变通方法是切换到使用常规服务的组合来处理Activity识别PendingIntents(在onStartCommand(Intent...))以及自定义的Runnable线程来处理从UI线程脱机的实际工作。如果你这样做,应用程序不再意外退出,你得到所需的效果。

有趣的是,Google Play Services的活动识别功能的文档和示例代码只提到从android活动或片段进行用户活动识别,而从未提到从服务进行用户活动识别。是否只有在UI线程上运行的组件才能使用IntentService进行活动识别???

 类似资料:
  • 问题内容: OMG-Eclipse(3.3 Europa)发生了什么- 是否有人遇到了这个问题(请记住,我一直在卸载不同的Tomat容器并安装其他容器,但无论如何,这是另一个故事) 当我在我的项目中更改代码行或删除项目中的类时(当我进行调试时),它实际上转到注释掉的行,并且无论如何都运行该行!!!例如 //System.out.println(“您应该无法阅读此内容!”); 更新:这可以通过设置项

  • 我是一个对使用python相当陌生的爱好者。自从我安装 Pygame 以来已经一周了,经过多次尝试,当我运行任何程序时,我仍然无法启动或打开 Pygame 窗口。我已经看了尽可能多的教程,并阅读了我能找到的关于类似问题的所有文章。我已经复制了在其他网站上找到的所有解决方案,但问题仍然存在。然而,更奇怪的是,我正在使用的IDE(Pycharm)很少输出错误消息,而是简单地继续运行,但从未启动Pyga

  • 问题内容: 我是android的新手,我的论文就像android的“ Battery Doctor Saver”一样。我的第一个问题是选择多个应用程序并立即将其杀死。老实说,我已经遇到了第一大问题,但是我的问题是我一次只能杀死一个应用程序。因此,这是我的代码,谢谢您对我的问题的立即答复:)。 问题答案: 创建onButton,然后单击您的kill按钮。从ListView中收集所有选择的按钮及其位置

  • JavaFX Scene Builder有这个问题。它按预期工作,但分辨率似乎低于应用程序的其余部分。 是否有一种方法,我可以恢复场景构建器的设置或有一个设置,我已经错过了?在网上找不到任何关于它的信息。 TIA

  • 我制作了一个程序,要求用户输入5位数字,然后程序将查找这些数字的总和。我想知道我怎样才能使程序在计算一次之后一遍又一遍地要求一个数字。我希望用户再试一次,直到他自己想退出。

  • 我正在尝试将一个.ear应用程序部署到WildFly10.1Final。ear有2个嵌套的.war文件。war文件中没有“jboss-web.xml”文件。 信息[org.jboss.as.server.deployment.scanner](DeploymentScanner-Threads-1)WFLYDS0004:在部署目录中找到MyApp.ear。要触发部署,请创建一个名为myapp.ea