2012-04-26 2 views
2

Я использую обработчик исключенных исключений для исключения исключений, но это приводит к остановке моего приложения. Я ссылаюсь на этот пост How do I stop my application from zombifying after I handle an uncaught Excepition? , а как это Ideal way to set global uncaught exception Handler in AndroidСбой при использовании при использовании обработчика исключенных обработчиков исключений для приложения

@Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.advsearch); 
     setTitle("Advance Search"); 


    Thread.setDefaultUncaughtExceptionHandler(new SRSDexception(this)); 


    String trace = null; 
    String line; 
    try { 
     BufferedReader reader = new BufferedReader(
     new InputStreamReader(SRSDAdvSearch.this 
     .openFileInput("stack.trace"))); 

     while((line = reader.readLine()) != null) { 
     trace += line+"\n"; 
     } 
     } catch(FileNotFoundException fnfe) { 
     // ... 
     } catch(IOException ioe) { 
     // ... 
     } 

     Intent sendIntent = new Intent(Intent.ACTION_SEND); 
     String subject = "Error report"; 
     String body = 
     "Mail this to [email protected]: "+ 
     "\n\n"+ 
     trace+ 
     "\n\n"; 

     sendIntent.putExtra(Intent.EXTRA_EMAIL, 
     new String[] {"[email protected]"}); 
     sendIntent.putExtra(Intent.EXTRA_TEXT, body); 
     sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
     sendIntent.setType("message/rfc822"); 

     SRSDAdvSearch.this.startActivity(
     Intent.createChooser(sendIntent, "Title:")); 

     SRSDAdvSearch.this.deleteFile("stack.trace"); 

Это мой класс активности, который в свою очередь, вызывает мой класс исключения После прочтения URL вы получите, чтобы узнать, что я хочу .. я копировали за исключением неперехваченного что

import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Context; 

public class SRSDexception implements Thread.UncaughtExceptionHandler { 

private Thread.UncaughtExceptionHandler defaultUEH; 

private Activity app = null; 

public SRSDexception(Activity app) { 
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); 
this.app = app; 

} 

public void uncaughtException(Thread t, Throwable e) 
{ 
// System.out.println("You crashed thread " + t.getName()); 
// System.out.println("Exception was: " + e.toString()); 
StackTraceElement[] arr = e.getStackTrace(); 
String Raghav =t.toString(); 
String report = e.toString()+"\n\n"; 
report += "--------- Stack trace ---------\n\n"+Raghav; 
for (int i=0; i<arr.length; i++) 
{ 
report += " "+arr[i].toString()+"\n"; 
} 
report += "-------------------------------\n\n"; 

// If the exception was thrown in a background thread inside 
// AsyncTask, then the actual exception can be found with getCause 
report += "--------- Cause ---------\n\n"; 
Throwable cause = e.getCause(); 
if(cause != null) { 
report += cause.toString() + "\n\n"; 
arr = cause.getStackTrace(); 
for (int i=0; i<arr.length; i++) 
{ 
report += " "+arr[i].toString()+"\n"; 
} 
} 
report += "-------------------------------\n\n"; 

try { 
FileOutputStream trace = app.openFileOutput(
"stack.trace", Context.MODE_PRIVATE); 
trace.write(report.getBytes()); 
trace.close(); 
} catch(IOException ioe) { 
// ... 
} 

defaultUEH.uncaughtException(t, e); 
} 

StackTrace

[android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314), 
SRTekBox.Android.SRSD.SRSDAdvSearch.fnExpand(SRSDAdvSearch.java:390), 
SRTekBox.Android.SRSD.SRSDAdvSearch$5.onClick(SRSDAdvSearch.java:209), 
android.view.View.performClick(View.java:2408), android.view.View$PerformClick.run (View.java:8816), 
android.os.Handler.handleCallback(Handler.java:587), 
android.os.Handler.dispatchMessage(Handler.java:92), 
android.os.Looper.loop(Looper.java:123), 
android.app.ActivityThread.main(ActivityThread.java:4633), 
java.lang.reflect.Method.invokeNative(Native Method), 
java.lang.reflect.Method.invoke(Method.java:521), 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858), 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616), 
dalvik.system.NativeStart.main(Native Method)] 

я не знаю, в чем проблема, это может быть

  1. мой поток становится разбился
  2. мой обработчик не вызывается
  3. или его не принимая исключение фронт, но это приводит к остановке мое приложение
  4. Исключение делает врезаться следующие возможности

Может кто-нибудь помочь мне, чтобы предотвратить эту остановку

+0

Не знаю, что вы просите или пытаетесь сделать. – JoxTraex

+1

Вы не можете отступать от своего кода? (n затмение выберите блок, сдвиньте его вправо, используя исходное меню и вставьте его в свой вопрос) – Snicolas

+0

Также дайте трассировку стека, пожалуйста, – Snicolas

ответ

3

Используйте ACRA (http://code.google.com/p/acra/)! Они делают то, что вам нужно, и решили проблемы, которые вы переживаете.

+0

ACRA также может использоваться для исключения исключения –

+0

Вы даже просматривали сайт? –

+0

@bitbix yeaa –

Смежные вопросы