2012-10-28 3 views
2

별도의 스레드를 사용하여 이미지에 대한 백그라운드 처리를 수행하는 Android 서비스가 있습니다. 이 서비스에서 오류가 발생하거나 스레드가 더 나빠진 경우 실행중인 활동에 문제를 알리고 응용 프로그램을 안정된 상태 (즉, 서비스를 시작하기 전의 상태)로 복구하는 것이 가장 좋은 방법입니다.Android 서비스에서 오류 처리를위한 최선의 방법

서비스 내에서 토스트 나 알림을 올릴 수는 있지만 그건 도움이되지 않습니다. 사용자에게 문제에 대해 알리고 싶지만 동시에 응용 프로그램을 안정된 상태로 복구하십시오.

답변

1

누군가가 이것을 검색하는 경우, 내가 뭘했는지 설명 할 것입니다.

서비스 내에서 AsyncTask을 확장하는 개인 클래스를 추가했습니다. 이것은 모든 처리가 완료된 것입니다.

이 클래스에는 개인 변수 '예외'가 있습니다. doInBackground 메서드의 내용은 try/catch로 둘러싸여 있으며 catch 된 예외는 '예외'에 저장됩니다. onPostExecute 메서드에서 '예외'가 설정되어 있는지 확인한 후 예외 상황이있는 경우 브로드 캐스트 PROCESSING_ERROR 예외 정보를 보내면 호출 작업이 통보됩니다.

당신은 AsyncTask를, doInBackground가 또는 onPostExecute 당신은 다음과 같은 읽어야 모르는 경우 :

1

Messenger을 사용하면 서비스와 기본 응용 프로그램간에 정보를 전달할 수 있습니다.

은 다음과 당신의 주요 활동에 메신저를 정의 서비스에 바인딩 할 때

private Messenger = mMessengerCliente = new Messenger(new IncomingHandler()); 

/** 
* Handler of incoming messages from service. 
*/ 
private class IncomingHandler extends Handler { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
      case MSG_1: 
       //actions to perform on message type 1 
       break; 
      case MSG_2: 
       //actions to perform on message type 2 
       break; 
      default: 
       super.handleMessage(msg); 
     } 
    } 
} 

ExtraMessenger 개체를 전달하거나. 서비스에서

Messenger 객체를 복구하고 다시 의사 소통을하는 데 사용

   mMsgClientMain = (Messenger)intent.getExtras().get(EXTRA_MESSENGER); 

       Message msg = Message.obtain(null, MSG_1, arg1, arg2); 
       msg.replyTo=reply_to; // if you need to have bidirectional communication, pass here the service messenger object 
       mMsgClientMain.send(msg); 

감사합니다.

관련 문제