2011-07-18 11 views
5

En mi aplicación utilizo un controlador global de excepciones para evitar cerrar la fuerza. Pero una actividad se inicia después de llamar a system.exit (0) .... ????Actividad reiniciada cuando se cierra la aplicación del controlador unexception

la Logcat se muestra es:

07-18 12:41:12.569: WARN/Resources(8453): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f07000a} 
07-18 12:41:14.648: INFO/ActivityManager(571): Displayed activity com.fss/.Loading: 2643 ms 
07-18 12:41:14.689: INFO/System.out(8453): >>>>>>>>SentRequestBE 
07-18 12:41:14.689: INFO/System.out(8453): >>>>>>>>StaticStore.dialog.getProgress()0==100 
07-18 12:41:15.399: INFO/System.out(8453): >>>>>>>>SentRequestBE 
07-18 12:41:15.429: INFO/System.out(8453): >>>>>>>>StaticStore.dialog.getProgress()20==100 
07-18 12:41:16.288: DEBUG/SmsProvider(611): insert url=content://sms/inbox, match=2 
07-18 12:41:16.510: DEBUG/dalvikvm(8453): GC freed 5512 objects/258536 bytes in 745ms 
07-18 12:41:16.640: INFO/System.out(8453): >>>>>>>>SentRequestBE 
07-18 12:41:16.662: INFO/System.out(8453): >>>>>>>>StaticStore.dialog.getProgress()40==100 
07-18 12:41:16.688: INFO/System.out(8453): >>>>>>>null 
07-18 12:41:16.739: DEBUG/AndroidRuntime(8453): Shutting down VM 
07-18 12:41:16.739: WARN/dalvikvm(8453): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) 
07-18 12:41:16.799: INFO/System.out(8453): ***************************EXception Ctached here******************** 
07-18 12:41:16.919: ERROR/Report ::(8453): java.lang.RuntimeException: Unable to start receiver com.fss.SMSRecieve: java.lang.NullPointerException 
07-18 12:41:16.919: ERROR/Report ::(8453): --------- Stack trace --------- 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.handleReceiver(ActivityThread.java:2417) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.access$2700(ActivityThread.java:112) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread$H.handleMessage(ActivityThread.java:1741) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.os.Handler.dispatchMessage(Handler.java:99) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.os.Looper.loop(Looper.java:123) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.main(ActivityThread.java:3948) 
07-18 12:41:16.919: ERROR/Report ::(8453):  java.lang.reflect.Method.invokeNative(Native Method) 
07-18 12:41:16.919: ERROR/Report ::(8453):  java.lang.reflect.Method.invoke(Method.java:521) 
07-18 12:41:16.919: ERROR/Report ::(8453):  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
07-18 12:41:16.919: ERROR/Report ::(8453):  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
07-18 12:41:16.919: ERROR/Report ::(8453):  dalvik.system.NativeStart.main(Native Method) 
07-18 12:41:16.919: ERROR/Report ::(8453): ------------------------------- 
07-18 12:41:16.919: ERROR/Report ::(8453): --------- Cause --------- 
07-18 12:41:16.919: ERROR/Report ::(8453): java.lang.NullPointerException 
07-18 12:41:16.919: ERROR/Report ::(8453):  com.fss.SMSRecieve.onReceive(SMSRecieve.java:26) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.handleReceiver(ActivityThread.java:2408) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.access$2700(ActivityThread.java:112) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread$H.handleMessage(ActivityThread.java:1741) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.os.Handler.dispatchMessage(Handler.java:99) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.os.Looper.loop(Looper.java:123) 
07-18 12:41:16.919: ERROR/Report ::(8453):  android.app.ActivityThread.main(ActivityThread.java:3948) 
07-18 12:41:16.919: ERROR/Report ::(8453):  java.lang.reflect.Method.invokeNative(Native Method) 
07-18 12:41:16.919: ERROR/Report ::(8453):  java.lang.reflect.Method.invoke(Method.java:521) 
07-18 12:41:16.919: ERROR/Report ::(8453):  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
07-18 12:41:16.919: ERROR/Report ::(8453):  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
07-18 12:41:16.919: ERROR/Report ::(8453):  dalvik.system.NativeStart.main(Native Method) 
07-18 12:41:16.939: INFO/System.out(8453): *************finally block enetered 
07-18 12:41:16.979: INFO/NotificationService(571): enqueueToast pkg=com.fss [email protected] duration=1 
07-18 12:41:17.018: INFO/AndroidRuntime(8453): AndroidRuntime onExit calling exit(0) 
07-18 12:41:17.029: ERROR/JavaBinder(8453): Unknown binder error code. 0xfffffff7 
07-18 12:41:17.049: ERROR/JavaBinder(8453): Unknown binder error code. 0xfffffff7 
07-18 12:41:17.148: INFO/ActivityManager(571): Process com.fss (pid 8453) has died. 
07-18 12:41:17.188: INFO/WindowManager(571): WIN DEATH: Window{43721d70 com.fss/com.fss.DynamicCanvas paused=false} 
07-18 12:41:17.198: INFO/WindowManager(571): WIN DEATH: Window{43733cf8 com.fss/com.fss.ListSelection paused=false} 
07-18 12:41:17.198: INFO/WindowManager(571): WIN DEATH: Window{437ba200 com.fss/com.fss.DynamicCanvas paused=false} 
07-18 12:41:17.210: INFO/WindowManager(571): WIN DEATH: Window{43718e10 com.fss/com.fss.Loading paused=false} 
07-18 12:41:17.210: INFO/WindowManager(571): WIN DEATH: Window{43744eb8 com.fss/com.fss.Loading paused=false} 
07-18 12:41:17.509: INFO/ActivityManager(571): Start proc com.fss for activity com.fss/.DynamicCanvas: pid=8468 uid=10019 gids={3003} 
07-18 12:41:17.958: INFO/jdwp(8468): received file descriptor 20 from ADB 
07-18 12:41:18.189: WARN/System.err(8468): Can't dispatch DDM chunk 46454154: no handler defined 
07-18 12:41:18.219: WARN/System.err(8468): Can't dispatch DDM chunk 4d505251: no handler defined 
07-18 12:41:19.710: INFO/ActivityManager(571): Starting activity: Intent { flags=0x24000000 comp={com.fss/com.fss.SplashScreen} (has extras) } 
07-18 12:41:19.810: INFO/System.out(8468): Dynamic Canvas...... 
07-18 12:41:20.010: INFO/System.out(8468): >>>>>5 
07-18 12:41:20.020: INFO/System.out(8468): >>>>> M-CONNECT Login 
07-18 12:41:20.030: INFO/System.out(8468): >>>>>APUM 
07-18 12:41:20.039: INFO/System.out(8468): >>>>>Enter password 
07-18 12:41:20.049: INFO/System.out(8468): >>>>>4-6-N-Y-Y 
07-18 12:41:20.079: INFO/System.out(8468): >>>>>1 
07-18 12:41:20.089: INFO/System.out(8468): temp >>>>> 1 4-6-N-Y-Y 
07-18 12:41:20.489: WARN/NotificationService(571): Object died trying to hide notification [email protected] in package com.fss 
07-18 12:41:20.499: WARN/ActivityManager(571): Activity pause timeout for HistoryRecord{437a8b80 {com.fss/com.fss.DynamicCanvas}} 
07-18 12:41:20.509: WARN/ActivityManager(571): setProcessForeground called on unknown pid: 8453 
07-18 12:41:20.970: INFO/ActivityManager(571): moveTaskToBack: 50 
07-18 12:41:21.699: WARN/InputManagerService(571): Got RemoteException sending setActive(false) notification to pid 8453 uid 10019 
07-18 12:41:22.049: WARN/ActivityManager(571): Launch timeout has expired, giving up wake lock! 
07-18 12:41:25.041: INFO/System.out(8468): >>>>>>>>>>>>OnCreateMethod 
07-18 12:41:25.359: INFO/System.out(8468): >>>>>>>>>>>>DBNAME/data/data/com.fss/databases/MPAY_444444 
07-18 12:41:25.369: ERROR/Database(8468): Failure 1 (table MiscDetails0029 already exists) on 0x1acf30 when preparing 'create table MiscDetails0029 (id integer primary key not null,table_row_one text);'. 
07-18 12:41:25.388: WARN/System.err(8468): android.database.sqlite.SQLiteException: table MiscDetails0029 already exists: create table MiscDetails0029 (id integer primary key not null,table_row_one text); 
07-18 12:41:25.408: WARN/System.err(8468):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 
07-18 12:41:25.430: WARN/System.err(8468):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1496) 
07-18 12:41:25.438: WARN/System.err(8468):  at com.fss.RmsStore$CustomSQLiteOpenHelper.onCreate(RmsStore.java:240) 
07-18 12:41:25.448: WARN/System.err(8468):  at com.fss.RmsStore.<init>(RmsStore.java:48) 
07-18 12:41:25.489: WARN/System.err(8468):  at com.fss.SplashScreen.startApp(SplashScreen.java:72) 
07-18 12:41:25.489: WARN/System.err(8468):  at com.fss.SplashScreen$1.run(SplashScreen.java:53) 
07-18 12:41:25.608: INFO/System.out(8468): ::::::::::::::::::SataticStore.NO ON ACC6 
07-18 12:41:25.628: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.672: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.688: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.699: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.699: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.718: INFO/System.out(8468): ::::::::::acountNumbers0 
07-18 12:41:25.768: INFO/ActivityManager(571): Starting activity: Intent { comp={com.fss/com.fss.DynamicCanvas} } 
07-18 12:41:25.778: WARN/ActivityManager(571): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { comp={com.fss/com.fss.DynamicCanvas} } 
07-18 12:41:26.969: INFO/ActivityManager(571): Displayed activity com.fss/.DynamicCanvas: 9671 ms 
07-18 12:41:27.670: WARN/NotificationService(571): STOP command without a player 
07-18 12:41:29.460: INFO/ActivityManager(571): Stopping service: com.android.mms/.transaction.SmsReceiverService 
07-18 12:41:30.088: DEBUG/ActivityManager(571): checkComponentPermission() adjusting {pid,uid} to {542,1013} 
07-18 12:41:30.239: DEBUG/ActivityManager(571): checkComponentPermission() adjusting {pid,uid} to {542,1013} 
07-18 12:41:30.429: DEBUG/ActivityManager(571): checkComponentPermission() adjusting {pid,uid} to {542,1013} 
07-18 12:41:30.628: DEBUG/ActivityManager(571): checkComponentPermission() adjusting {pid,uid} to {542,1013} 
07-18 12:41:30.769: ERROR/MediaPlayerService(542): Couldn't open fd for content://settings/system/notification_sound 
07-18 12:41:30.799: ERROR/MediaPlayer(571): Unable to to create media player 
07-18 12:41:30.839: WARN/NotificationService(571): error loading sound for content://settings/system/notification_sound 
07-18 12:41:30.839: WARN/NotificationService(571): java.io.IOException: setDataSource failed.: status=0x80000000 
07-18 12:41:30.839: WARN/NotificationService(571):  at android.media.MediaPlayer.setDataSource(Native Method) 
07-18 12:41:30.839: WARN/NotificationService(571):  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:610) 
07-18 12:41:30.839: WARN/NotificationService(571):  at android.media.AsyncPlayer$Thread.run(AsyncPlayer.java:76) 
07-18 12:41:32.818: DEBUG/dalvikvm(658): GC freed 687 objects/28744 bytes in 537ms 
07-18 12:41:37.668: DEBUG/dalvikvm(7930): GC freed 1122 objects/53896 bytes in 377ms 
07-18 12:41:42.769: DEBUG/dalvikvm(611): GC freed 804 objects/39568 bytes in 476ms 
07-18 12:41:48.278: DEBUG/dalvikvm(613): GC freed 445 objects/21192 bytes in 495ms 

Os adjunto el gestor de excepciones también ....

package com.fss; 



import java.lang.Thread.UncaughtExceptionHandler; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Looper; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.SurfaceHolder; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

public class TopExceptionHandler implements Thread.UncaughtExceptionHandler { 

private Context context; 
//private UncaughtExceptionHandler defaultHandler; 



    public TopExceptionHandler(Context context) { 


StaticStore.defaultHandler = Thread 
.getDefaultUncaughtExceptionHandler(); 
this.context=context; 






    } 






     public void uncaughtException(Thread t,final Throwable e) 

    { 
     StaticStore.mfs=true; 
     try{ 
     new Thread() { 
      @Override 
      public void run() { 
       Looper.prepare(); 


      Toast.makeText(context, "TOAST", Toast.LENGTH_LONG).show(); 


//    context.startActivity(intent); 
      // 



      //System.exit(0);//If you want to restart activity and want to kill after crash.s 
       Looper.loop(); 

      } 
     }.start(); 

     System.out.println("***************************EXception Ctached here********************"); 

     StackTraceElement[] arr = e.getStackTrace(); 

     String report = e.toString()+"\n\n"; 

     report += "--------- Stack trace ---------\n\n"; 

     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"; 

     } 

     } 


     Log.e("Report ::",report); 



    } 


     catch (Exception ex) { 
       ex.printStackTrace(); 
      } finally { 
       StaticStore.index=0; 
       System.out.println("*************finally block enetered"); 
       StaticStore.dialog.dismiss(); 

//   Intent myIntent = new Intent(); 
//   myIntent.setClassName("com.fss","com.fss.DynamicCanvas"); 
//    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
//    myIntent.putExtra("EXIT", true); 
//    context.startActivity(myIntent); 
//   System.runFinalizersOnExit(true); 
System.exit(0); 
//System.out.println("after sys exit"); 
// defaultHandler.uncaughtException(t, e); 

      } 
// throw new RuntimeException("You just caught me.."); 
    } 


} 
+0

com.fss.SMSRecieve.onReceive (SMSRecveve.java:26) Mejor verificar en esta línea ... algo es nulo que debería tener algún valor – Prasham

+0

sí ... la excepción está atrapada en el controlador de excepciones no detectadas y Intento salir de la aplicación. pero una de las actividades en mi aplicación (actividad DynamicCanvas) se reinicia ... ¿cómo evitarlo o por favor hágamelo saber la razón de eso ??????? – vinith

+0

@vinith ¿Puede tratar de formatear el fragmento de código para que sea legible? Es un desastre. Y también debe eliminar todo el código comentado si no es relevante para la pregunta. – Mig82

Respuesta

2

respuesta Muy poco tardía, pero ... En mi caso esto se produce sólo en algunos dispositivos , por ejemplo en Samsung Nexus 7. Para evitar este molesto reinicio, recuerdo la actividad actual en la variable estática y llamo a finish() antes de System.exit:

// base class for all activities in my application 
class BaseActivity extends Activity { 
    private static BaseActivity sCurrentActivity = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sCurrentActivity = this; 
    } 

    @Override 
    protected void onStart() { 
    super.onStart(); 
    sCurrentActivity = this; 
    } 

    @Override 
    protected void onResume() { 
    super.onResume(); 
    sCurrentActivity = this; 
    } 

    @Override 
    protected void onPause() { 
    super.onPause(); 
    sCurrentActivity = null; 
    }  

    public static System_exit(int exitCode) { 
    if (null != sCurrentActivity) { 
     sCurrentActivity.finish(); 
     sCurrentActivity = null; 
    } 
    System.exit(exitCode); 
    } 
} 
+0

Gracias por esta publicación: he estado tratando de comprender por qué un número muy pequeño de mis usuarios tenía problemas y esta era la solución. +1! – brandall

1

Gracias! Eso funcionó - PERO: debes terminar tu actividad principal, no funciona si terminas alguna otra. Y aquí es un poco de mejora: Si alguna vez quieres una referencia estática a una actividad, es mejor utilizar una referencia débil y un captador estática, en lugar de una referencia fuerte:

public class MainActivity extends Activity { 
    private static WeakReference<MainActivity> sharedActivity = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     sharedActivity = new WeakReference<MainActivity>(this); 
     setContentView(R.layout.activity_main); 
    } 

    public static MainActivity sharedActivity() { 
     try { 
      return sharedActivity.get(); 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 

El WeakReference no evitará que la basura coleccionista de GC'ing la actividad. Si se recopiló, el valor de retorno de WeakReference será nulo, de lo contrario se devolverá el objeto de actividad. Alivia su código y le impide acceder a una actividad terminada.

Cuestiones relacionadas