tep*_*tep 16 android intentservice
这个过程是错误的错误似乎没有很好的记录,我只能找到变通方法.我对此错误的原因以及如何防止它发生感兴趣,而不是如何通过重新启动,重新启动应用程序等手动处理它.
我的特定应用程序使用AlarmManager启动IntentService,每30秒运行约10秒.这是在创建应用程序时调用的:
Intent serviceIntent = new Intent(appContext, MyService.class);
serviceIntent.putExtra("service_extra", extra);
launchService = PendingIntent.getService(
appContext,
LAUNCH_SERVICE_REQUEST_CODE,
scanIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
alarmManager.setInexactRepeating(
AlarmManager.RTC,
System.currentTimeMillis() + interval,
interval,
launchService
);
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下按预期工作.但是,有时候服务无法无限期启动,有时几小时无法启动.每隔约30秒就会出现以下错误,因此我知道我的警报正在尝试按计划启动IntentService,但尝试失败并且进程错误.
Unable to launch app com.example.android/10024 for service Intent { cmp=com.example.android/.MyService (has extras) }: process is bad
Run Code Online (Sandbox Code Playgroud)
只需重新打开应用即可解决此问题.但我需要知道如何预防它!此服务的目的是在活动停止或销毁时在后台运行,因此必须在没有任何用户交互或解决方法的情况下防止此错误.
好机会是它与活动生命周期的处理有关。
这让我想起了我最近解决的一个案例,但没有完全理解它,因为文档对于在 Activity 上调用 onStop() 后可以依赖的内容并不是很具体。以及你到底不应该做什么......
所以我只能给你一些提示:
如果我的猜测是正确的,当您的应用程序(部分)从内存中删除时,您会遇到无法正确恢复的问题。尝试将开发人员设置中的后台应用程序限制设置为“无”。我怀疑通过这种设置,当您将其置于后台时,您的问题将完全可重现。否则你可能可以停止阅读这里。
我有一个线程在 onStop() 之后继续运行,它还保留了一些引用。在 onPause() 中停止线程并等待它完成解决了我的问题。我还需要同步 onStop(),因为阻塞 onPause() 会导致 onStop() 并行出现。我还需要将一些初始化从 onCreate() 移至 onResume()。但一旦我弄清楚了 onResume() 和 onStop() 中要删除的内容,这一点就非常明显了。
静电的尖端可能朝同一方向移动。
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |