2010-12-16 7 views
1

私は大規模なアンドロイドアプリを持っています。最近、私は、キャッチされていない例外で例外がDDMS Logcatに表示され、呼び出し側の親アクティビティが再起動されることを確認します(onCreate getが呼び出されます)。理想的には、アプリケーションはただ終了する必要があります。コールアクティビティを再起動すると、キャッチされない例外が発生しますか?

ARCAクラッシュアプ​​リケーションレポートを使用していますが、コメントアウトしても同じアクティビティが再開されています。私はstartActivityForResultsを呼び出しています。アンドロイドマニフェストには、アクティビティとサブアクティビティのためにアンドロイド:finishOnTaskLaunchがtrueになっています。

例外の原因となったアクティビティの原因は何ですか?

答えて

2

これは強制終了の予想される動作だと思います。ユーザは、システムが、現在の状態、すなわち最後に働いた活動に可能な限り近づけようとしていることを確認すると、例外を通知される。

なぜこの動作が望ましくないのかわかりませんが、クラッシュのためにアクティビティが再開されたことを認識し、すぐにonCreateを終了する独自の方法を考え出す必要があります。

編集: 私は一緒に入れたテストアプリ:あなたはTest2を中にボタンを押すと

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(); 
      } 
     }); 
    } 
} 

、例外がスローされます。 Androidは強制終了ダイアログを表示し、ダイアログで[OK]をクリックすると、Testに戻ります。それが私がデフォルトの動作を意味するものです。

これを処理する最善の方法は、決して例外をスローしないようにアプリを修正することです。

最後の手段として、キャッチされない例外を処理するハンドラを追加することができます。uncaughtExceptionHandler。これにより、強制終了ダイアログが最初に表示されるのを防ぐので、好きなようにすることができます。

+0

Thanks Marya ...これはAndroidアプリケーションのデフォルトの動作ではありません。サンプルアプリケーションを試してクラッシュした場合、アプリケーションは終了します。私は別のシンプルなアプリでこのケースをシミュレートしようとしましたが、「完全に」クラッシュします。私は何がアプリの再起動を引き起こす可能性があるかについてのポインタを探していた。 – bschandramohan

+0

「理由」に関しては、アクティビティが再開されたときにアプリケーションが悪い状態にあり、この時点ですべての自分のアクティビティの無効な状態をコード内で処理したくありません。アプリを終了し、acra/marketplaceに私の例外を報告するのが良いと思われる。 – bschandramohan

+0

編集を参照....... –

関連する問題