防止Android"进程不好"错误

时间:2014-10-19 15:56:38

标签: 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
    );

大部分时间都按预期工作。但是,有时候服务无法无限期启动,有时几小时无法启动。每隔~30秒就会出现以下错误,因此我知道我的警报正在尝试按计划启动IntentService,但尝试失败并且进程是错误的错误。

Unable to launch app com.example.android/10024 for service Intent { cmp=com.example.android/.MyService (has extras) }: process is bad

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

2 个答案:

答案 0 :(得分:1)

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

它让我想起了我最近在没有完全理解的情况下解决的一个案例,因为在你的Activity上调用onStop()之后,文档并不是非常具体的。那究竟你应该做什么......

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

如果我的猜测正确,那么当您的应用程序(部分)从内存中删除时,您将无法正常恢复。 尝试将开发人员设置中的后台应用限制设置为"无"。 我怀疑使用此设置,将问题置于后台后,您的问题将完全可重现。否则你可能会在这里停止阅读。

我有一个在onStop()之后继续运行的线程,它也保留了一些引用。在onPause()中停止线程并等待它以finsh解决了我的问题。我还需要同步我的onStop()因为阻塞onPause()导致onStop()进入并行。我还需要将我的一些启动从onCreate()移到onResume()。但是,一旦我弄清楚要在onResume()和onStop()中删除什么,那就很明显了。

静态的tipp可能朝着同一个方向发展。

答案 1 :(得分:0)

服务崩溃几次后,发生“进程错误”错误。系统阻止它重新备份,而是打印该消息。您可以通过重新启动来清除崩溃计数,或者通过杀死系统服务器来更快地清除崩溃计数:

adb shell killall system_server

这实际上是“软重启”,将终止/重启您要执行的所有进程。