2011-07-01 6 views
3

가능한 중복 : 내 활동 중 하나에 onCreate()UncaughtExceptionHandler을 구현 한
Using global exception handling with “setUncaughtExceptionHandler” and “Toast”UncaughtExceptionHandler.uncaughtException() 메소드에서 다른 활동을 시작하려면 어떻게해야합니까?

.

uncaughtException() 메서드에서 추가 매개 변수 (오류 msg 및 스택 추적)를 사용하여 다른 활동 ErrorActivity을 열려고합니다. 그 활동은 AlertDialog을 (globaly, 표준) 및 몇 가지 중 하나가 왜 열린 ErrorActivity 나던 oncoughtException에서 코드가 실행됩니다 동안 말해 줄 수 등

로그를 처리 표시해야합니다? 문제가 Thread과 관련된 것으로 의심됩니다.

public class ErrorActivity extends Activity { 

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

     Bundle bundle = getIntent().getExtras(); 
     String name = bundle.getString("ERROR"); 
     ShowAlertDialog(name); 
    } 
} 
+0

응용 프로그램을 완전히 닫거나 응용 프로그램을 강제 종료하십시오. 여기에 logcat 세부 정보 및 AndroidManifest 파일 – Pratik

+0

AndroidManifest 파일이 정상입니다. 활동은 거기 등록됩니다. 오류는 발생하지 않습니다. startActivity()가 호출 된 후 아무 것도 발생하지 않습니다 (빈 화면). LogCat은 깨끗합니다. – no9

+0

FLAG_ACTIVITY_NEW_TASK를 사용하고 Intent에서 singleTask를 사용하는 것이 좋습니다 – ingsaurabh

답변

2

이 참조가 Using global exception handling with “setUncaughtExceptionHandler” and “Toast”

Qberticus는

말했다 : 여기

오류를 처리해야

public class MainActivity extends Activity { 

    GlobalSettings settings; 

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

     Thread.currentThread().setUncaughtExceptionHandler(
       new UncaughtExceptionHandler() { 

      @Override 
      public void uncaughtException(Thread thread, Throwable ex) { 
       Intent intent = new Intent(MainActivity.this, 
               ErrorActivity.class); 
       Bundle bundle = new Bundle(); 
       bundle.putString("ERROR", ex.getMessage()); 
       intent.putExtras(bundle); 
       startActivity(intent); 
      } 
     }); 

     settings = (GlobalSettings) getApplication(); 
     settings = null; 
     settings.getApplicationContext(); 
     setContentView(R.layout.main); 
    } 
} 

그리고 내 두 번째 활동 첫 활동 (onCreate()에서 예외를 시뮬레이션)입니다

UI 스레드 예외가 발생하여 스택이 완전히 펼쳐 지므로 아무 것도 표시되지 않습니다. 그래서 더 이상 루퍼가없고 거기에 지원이 없으므로 토스트를 표시하는 데 사용됩니다.

예외가 UI에서 발생하기 때문에 우리가 UI 작업 :(당신이 AndroidManifest.xml. 기본적으로

버그 보고서 활동에 참조하는 <activity> 요소에 속성 android:process=":report_process"을 추가 할 수 있습니다

+0

나는 또한 새 스레드에서 활동을 호출 해 보았습니다. 그것은 작동하지 않습니다. – no9

+0

새 스레드가 작동하지 않습니다. 새로운'task'를 시작해야합니다.플래그 _FLAG_ACTIVITY_NEW_TASK_이 (가) –

+0

아마 새로운 프로세스이지만 작동하지 않는다는 것을 알 수는 없지만 좋은 생각인지 확실하지 않습니다. – no9

2

을 할 수 없어, 동일한 응용 프로그램에 속한 활동이 패키지 이름으로 식별되는 동일한 프로세스에서 실행될 수 있습니다. android:process 속성을 설정하면이 값을 덮어 쓸 수 있습니다. :으로 시작하는 android:process은 패키지 내의 개인 식별자를 참조하므로 활성화를 시작할 수 있습니다 새로운 프로세스에서 다른 패키지의 프로세스와 충돌하지 않습니다.

관련 문제