2011-02-07 7 views
41

私はfinish()を呼び出していますが、私の活動は継続しています。Androidのアクティビティでfinish()を呼び出すことは実際に完了しません

メインアクティビティ画面のメニューから呼び出されるアクティビティがあります。リストには、それはトーストを置きます、と私はfinish()への呼び出しにブレークポイントを設定することができます空の場合

// Make sure there are some events in the list. 
    if (theEventArrayList.isEmpty()){ 
     Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    SummarizeCurrentEvent(); 
    graphEvents(); 

:私の活動のonCreate()方法では、私は次のコードを持っています。デバッガでそれを実行すると、すぐにSummarizeCurrentEvent()に進みます。私はfinish()が活動を終了すると思った。これは当てはまりませんか?この方法に関する詳しい情報はどこにありますか?

答えて

65

finishというメソッドは、それ以外の場合は完全に実行されるため、finishの後にreturnステートメントを置く必要があります。ただそれは、例えばを完了するために行う必要がある何をする活動を指示する)about finish() in android

+1

SummarizeCurrentEvent()を使用する方が良いでしょうか。 graphEvents(); ... 'else {}'ブロック内の? –

+0

@ ban-geoengineering潜在的に複数の '' if(...){finish();戻る; } ''。私は次のコードがあるときに明示的に '' finish() ''と '' return ''するのは良い習慣だと思います。 –

0

終了はアクティビティを終了しますが、UIの操作を行うのはメインループまでです。 onCreateから戻ったUIループが実行されるまで待つ必要があります。

5

フィニッシュ(:も

、この質問を参照してください。 shutdown、onPauseを呼び出す、結果を親に報告するなどexit()呼び出しや何もしません。

finish()コールの後に戻る必要があります。他の回答に追加

3

、あなたはまだ(Re)onStartonResumeと呼び出さを有することができます。

これは、次のリンクで、1つのアクティビティが強制終了されると、まずStopとonDestroyでonPause(おそらくは保証されている)が呼び出されるという表があるためです。

リファレンスActivity

0

これはtry...catchのステートメントを使用すべき場合です。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     //...some initialization... 

     // Make sure there are some events in the list. 
     if (theEventArrayList.isEmpty()){ 
      throw new Exception("Event List is empty"); 
     } 
     SummarizeCurrentEvent(); 
     graphEvents(); 
    } catch (Exception e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
} 
関連する問題