2010-12-16 7 views
1

나는 큰 안드로이드 응용 프로그램을 가지고 있으며 최근에 어떤 잡히지 않은 예외에서 DDMS Logcat에 예외가 표시되고 호출하는 부모 작업이 다시 시작된다는 것을 알게되었습니다 (onCreate get이 호출 됨). 이상적으로 응용 프로그램이 종료되어야합니다.호출 활동을 다시 시작하면 캐치되지 않는 예외가 발생합니까?

우리는 ARCA 충돌 응용 프로그램보고를 사용하고 있지만 주석을 달고 여전히 동일한 활동이 다시 시작되는 것을 봅니다. startActivityForResults를 호출하고 있고 android manifest는 액티비티와 서브 액티비티에 대해 android : finishOnTaskLaunch true를가집니다.

예외가 발생했을 때 활동을 일으킬 수있는 포인터는 무엇입니까?

답변

2

이것이 강제 종료의 예상되는 동작이라고 생각합니다. 사용자가 예외 상황을 통보하면 시스템은 가능한 한 최근 상태, 즉 마지막으로 수행 한 활동에 최대한 가깝게하려고 시도합니다.

이 동작을 원하지 않는 이유는 모르겠지만 충돌로 인해 작업이 다시 시작되고 즉시 onCreate를 종료한다는 인식 방법을 찾아야 할 수도 있습니다.

편집 :

public class Activity1 extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button button = (Button)findViewById(R.id.button); 
     button.setText("test"); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Activity1.this, Activity2.class); 
       startActivityForResult(intent, 0); 
      } 
     }); 
    } 
} 

public class Activity2 extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     Button button = (Button)findViewById(R.id.button); 
     button.setText("test2"); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       throw new RuntimeException(); 
      } 
     }); 
    } 
} 

당신이 Test2를에있는 버튼을 눌러

는, 예외가 발생합니다 : 난 그냥 함께 테스트 응용 프로그램을 넣어. Android는 강제 종료 대화 상자를 표시하고 대화 상자에서 확인을 클릭하면 다시 테스트로 이동합니다. 그것이 기본 동작의 의미입니다.

이 문제를 해결하는 가장 좋은 방법은 예외를 throw하지 않도록 앱을 수정하는 것입니다.

마지막 수단으로 캐치되지 않은 예외를 처리하기위한 처리기를 추가 할 수 있습니다 (uncaughtExceptionHandler). 이렇게하면 강제 종료 대화 상자가 처음부터 표시되지 않으므로 원하는대로 수행 할 수 있습니다.

+0

감사합니다 Marya ... 이것은 Android 애플리케이션의 기본 동작이 아닙니다. 샘플 응용 프로그램을 시도하고 충돌이 발생하면 응용 프로그램이 종료됩니다. 나는 다른 간단한 응용 프로그램에서 사건을 시뮬레이션하려고 시도하고 "완전히"충돌합니다. 나는 애플 리케이션의 재발견을 일으킬 수있는 포인터에 대한 포인터를 찾고 있었다. – bschandramohan

+0

그리고 "이유"와 관련하여 활동이 다시 시작될 때 응용 프로그램의 상태가 좋지 않아 현재이 모든 활동에 대한 코드의 잘못된 상태를 처리하고 싶지 않습니다. 앱을 닫고 acra/marketplace에서 나를 예외로보고하도록 허용하는 것이 더 나은 것 같습니다. – bschandramohan

+0

수정 사항보기 ....... –

관련 문제