2014-10-19 19 views
15

过程不好错误似乎没有很好的记录,我只能找到解决方法。我对这个错误的原因感兴趣,以及如何防止它发生,而不是如何通过重新启动,重新启动应用程序等手动处理它。防止Android“过程不好”错误

我特别的应用程序使用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 

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

+1

服务中是否有任何静态变量? – Rahul 2017-08-01 17:23:22

+0

不确定,多年没有触及代码,也无法访问。但可能是的。怎么来的? – tep 2017-08-26 14:01:46

回答

1

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

它让我想起最近解决的一个案例,但没有完全理解它,因为在您的Activity上调用onStop()之后,文档并不十分具体。你不应该做什么...

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

如果我的猜测是正确的,你有问题,没有被正确还原,当您的应用程序是(部分)从内存中移除。 尝试将开发者设置中背景应用的限制设置为“无”。 我怀疑用这个设置时,你的问题将完全重现,当把它放到背景。否则,你可能会停止阅读这里。

我有一个线程在onStop()之后继续运行,它也保留了一些引用。停止onPause()中的线程,并等待它finsh解决我的问题。我还需要同步我的onStop(),因为阻塞onPause()导致onStop()进入并列。我还需要将我的一些initClass从onCreate()移动到onResume()。但是,一旦我找到要在onResume()和onStop()中拆除的内容,这一点非常明显。

也许与静态tipp朝着相同的方向。

+0

感谢您的提示,我不再拥有此代码,无法验证,但我确实希望这对其他人解决相同问题很有用! – tep 2017-10-31 23:22:22