2010-12-16 25 views
1

我有一个大的android应用程序,最近我看到,在任何未捕获的异常,DDMS Logcat中显示异常,并在调用父活动获取重新启动(onCreate得到的调用)之后。理想情况下,应用程序应该退出。未捕获异常重新启动调用活动?

我们正在使用ARCA崩溃应用程序报告,但发表了评论,并且仍然看到重新启动的同一活动。我打电话给startActivityForResults,并且Android清单对于活动以及子活动都有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显示一个强制关闭对话框,当您在对话框中单击确定时,它会将您带回到测试。这就是我的默认行为。

处理此问题的最佳方法是修复您的应用程序,使其永不抛出异常。

作为最后的手段,您可以添加处理未捕获异常的处理程序:uncaughtExceptionHandler。这可以防止强制关闭对话框显示在第一位,所以你可以随心所欲。

+0

Thanks Marya ...这不是Android应用程序的默认行为。如果您尝试任何示例应用程序并发生崩溃,应用程序将退出。我试图在另一个简单的应用程序中模拟案例,它“完全”崩溃。我正在寻找可能导致应用重新启动的指针。 – bschandramohan 2010-12-17 19:47:43

+0

关于“为什么”,当活动重新启动时,应用程序处于不良状态,并且我不想在此时处理代码中用于所​​有活动的无效状态。关闭应用程序并允许acra/marketplace为我报告异常似乎更好。 – bschandramohan 2010-12-17 19:48:58

+0

请参阅编辑....... – 2010-12-17 20:07:14