防止Android"进程坏"错误

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)

只需重新打开应用即可解决此问题.但我需要知道如何预防它!此服务的目的是在活动停止或销毁时在后台运行,因此必须在没有任何用户交互或解决方法的情况下防止此错误.

mor*_*itz 1

好机会是它与活动生命周期的处理有关。

这让我想起了我最近解决的一个案例,但没有完全理解它,因为文档对于在 Activity 上调用 onStop() 后可以依赖的内容并不是很具体。以及你到底不应该做什么......

所以我只能给你一些提示:

如果我的猜测是正确的,当您的应用程序(部分)从内存中删除时,您会遇到无法正确恢复的问题。尝试将开发人员设置中的后台应用程序限制设置为“无”。我怀疑通过这种设置,当您将其置于后台时,您的问题将完全可重现。否则你可能可以停止阅读这里。

我有一个线程在 onStop() 之后继续运行,它还保留了一些引用。在 onPause() 中停止线程并等待它完成解决了我的问题。我还需要同步 onStop(),因为阻塞 onPause() 会导致 onStop() 并行出现。我还需要将一些初始化从 onCreate() 移至 onResume()。但一旦我弄清楚了 onResume() 和 onStop() 中要删除的内容,这一点就非常明显了。

静电的尖端可能朝同一方向移动。