1

나는 I/O를 실행하는 클래스 (ABC라고 부르 자)를 가지고있다. FileOutputStream.close와 같은 일부 함수는 try 블록을 사용하여 try 블록을 사용합니다. 또한, 나는 사용자와 내가 무슨 일이 일어나는지 알 수 있도록 도와주는 객체를 만들었다.안드로이드 쓰레드와 Throwable

이 클래스에서 나는이 클래스에서 그것을 만드는 액티비티를 전달하고, throwable 텍스트로 대화 상자를 만들고 경고하도록 만들었습니다.

여기 내 문제는이 클래스를 새 스레드에서 실행해야하지만 여전히 throwable 텍스트에서 정보를 가져 오려고합니다.

예를 들어, 이것이 내 수업에서 일반적인 catch 절처럼 보입니다.

new AlertDialog.Builder(myContext) 
         .setTitle("Error Message") 
         .setMessage(
           "Error Code: #006" + "\n" + T.toString()) 
         .setNeutralButton("OK", 
           new DialogInterface.OnClickListener() { 

            @Override 
            public void onClick(
              DialogInterface dialog, 
              int which) { 
             // TODO: Add Ability to Email 
             // Developer 

            } 
           }).show(); 

난 그냥 경고 대화 상자 대신에 ABC 클래스 내부

throw new Throwable(throwable); 

같은 것을 할 것인가? 그런 다음 경고 대화 상자를 내 Runnable 인터페이스 실행 메소드가 호출 된 try catch 또는 asynchtask의 백그라운드 do로 이동하겠습니까?

답변

2

Java의 Thread.UncaughtExceptionHandler을 사용하면 텍스트를 저장하고 대화 상자를 표시 할 수 있습니다. 이 같은 Thread.UncaughtExceptionHandler을 확장하는 새로운 클래스를 만들 것입니다 그래서 : 스레드를 시작 코드에서

public class myThreadExceptionHandler implements Thread.UncaughtExceptionHandler 
{ 
    private DataTargetClass dataTarget; 
    public myThreadExceptionHandler(DataTargetClass c) 
    { 
     dataTarget = c; 
    } 
    public void uncaughtException(Thread t, Throwable e) 
    { 
     dataTarget.exceptionObject = e; 
     dataTarget.onException(); 
     // Just substitute in whatever method your thread uses to return information. 
    } 
} 

을, 당신은이 작업을 수행 할 것입니다 :

foo = new DataTargetClass(); 
Thread t = new Thread(myIoRunnable(foo)); 
t.setUncaughtExceptionHandler(new myThreadExceptionHandler(foo)); 
t.start(); 
관련 문제