2014-10-19 3 views
15

프로세스가 잘못되었습니다. 문서화가 잘되어 있지 않은 것으로 보이며, 해결 방법을 찾을 수 밖에 없었습니다. 대신이 오류의 원인과 발생을 방지하는 방법에 관심이 있습니다. 재부팅, 앱 다시 시작 등을 통해 수동으로 처리하는 방법이 아닙니다.안드로이드 "프로세스가 잘못되었습니다."오류가 발생하지 않도록하십시오.

내 특정 응용 프로그램은 AlarmManager를 사용하여 실행되는 IntentService를 시작합니다. ~ 10 대 ~ 30 대. 이 응용 프로그램을 만들 때 호출됩니다 :

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

+0

잘 모르겠지만 몇 년 안에 코드를 수정하지 않았으며 더 이상 액세스 할 수 없습니다. 그러나 그렇다. 어째서? – tep

답변

1

좋은 기회는 활동의 수명주기 처리와 관련이 있습니다.

onStop()이 Activity에 대해 호출 된 이후에 의존 할 수있는 문서가 설명서에 구체적으로 나와 있지 않기 때문에 최근에 해결하지 못한 경우를 상기시킵니다. 그리고 당신이 안 정확히 ...

그래서 난 단지 당신에게 몇 가지 힌트를 줄 수 있습니다 : 내 생각이 옳다면

, 제대로 복원하지으로 문제가있는 앱이있을 때 (부분적으로) 메모리에서 제거되었습니다. 개발자 설정의 배경 - 앱 제한을 '없음'으로 설정해보세요. 이 설정으로 문제를 배경으로 넣을 때 문제가 완전하게 재현 될 것으로 생각됩니다. 그렇지 않으면 아마 여기에서 읽을 수 있습니다.

나는 onStop() 이후에도 계속 실행되는 스레드가있어 참조를 유지했습니다. onPause()에서 스레드를 중지하고 내 문제를 해결할 때까지 기다립니다. onPop()을 차단하면 onStop()이 평행하게되므로 내 onStop()을 동기화해야했습니다. 또한 내 초기화의 일부를 onCreate()에서 onResume()으로 옮길 필요가있었습니다. 그러나 onResume()과 onStop()에서 무엇을 떼어 낼지 알아 냈을 때 그것은 분명했습니다.

아마도 정적 인 tipp는 같은 방향으로갑니다.

+0

팁을 주셔서 감사합니다.이 코드를 더 이상 소유하고 있지 않습니다. 확인할 수 없지만이 코드가 다른 사람에게 유용 할 수 있기를 바랍니다. – tep