2011-12-30 73 views
3

finish()を呼び出した直後にアクティビティを終了しないと便利な場合は特にありますか?finish()がすぐに処理を終了しないのはなぜですか?

(他の方法で、なぜ設計からすぐに活動を終了ません。この方法はありますか?)

http://developer.android.com/reference/android/app/Activity.html#finish()

UPDATE

私はすぐに言うとき、私はあなたが適切なタイミングで、意味finish()と呼びますが、インスタンスバンドルを保存してクリーンアップしても、onStopメソッドとonDestroyメソッドはカウントされません。

ここスニペットがあり、私が何を言っているかの例を参照するには

onCreate(Bundle savedInstance){ 
    // code executed 
    if(somecondition){ 
     finish(); 
    } 
    // code which shouldn't be executed 
} 

質問で、コードは、条件が活動を終了する前にも終了し、そしてなぜfinish()呼び出しが停止しないの後である理由すぐに処理する

+1

あなたはすぐにとはどういう意味ですか? – Flo

+1

これは当然のことですが、 'Activity'は' Activity#finish() 'と呼ぶライフサイクルに沿って、あなたの活動を一時停止、停止、破壊します。他のスレッドが実行中であったり、UIスレッドにポストバックしたりすることがあります。 – Jens

+0

@Floこのメソッドを呼び出した直後は、現在のプロセスブロックの残りのコードはスキップされます –

答えて

4

あなたが実行するために以下のコードを防ぐために、返還をすべきではない:

if(somecondition){ 
    finish(); 
    return; 
} 
+0

良い提案、私はすでにそのようなことをしています。問題は、「どうして私たちはこのようにしなければならないのか」であり、「機能コードの残りの実行を避けるにはどうすればよいか」ではなかった。しかし、とにかくありがとう –

+0

それはJavaの性質です。実行を停止できるのは、リターン、メソッドブロックの終了、または例外のスローです。 返品を避けたい場合は、おそらくelseブロックを追加することができます。 if(somecondition){ finish(); } else { } – evanwong

0

何かを確認する:完了していない非同期タスクを実行していますか?

+0

いいえ、既に実行中の 'finish()'呼び出し時の非同期タスク –

0

finish()はアクティビティを隠すだけですぐには終了しません。 これは、osが他のアプリケーションやプロセスを実行するために何らかのメモリが必要になったときに、それを強制終了することができます。

+0

私はあなたがここで説明しているのは、アクティビティを一時停止する動作ではないと思いますか? –

1

すべてのイベントを処理するループを持つthread_0があるとします。

終了を呼び出すと、新しいイベントが追加されますが、thread_0がイベントを処理するまで、アクティビティは強制終了されません。

+0

さて、 'finish()'を呼び出すと、あなたのアクティビティに 'ready-to-be-killed/finished'フラグを立て、終了コードをすぐにはトリガしない方法です。 –

0

Androidでは、finish()の後でもデータを保存できるようです。私は取り消しがスレッドを傷つけるかもしれないと思います。あなたの場合は、リターンを使用することができます。コードの実行を停止します。

関連する問題