2012-01-28 8 views
5

なぜこのアクティビティは終了しませんか?私は次のコードしている

mQuestions=DictionaryDbWrapper.getInstance().getQuestionsSequence(
      this.getIntent().getStringExtra(ApplicationUtilities.TEST_CATEGORY_PARAMETER), 50); 
    mQuestionsCount=mQuestions.size(); 
    Log.e("count", String.valueOf(mQuestionsCount)); 
    if (mQuestionsCount==0) { 
     Log.e("1", "111"); 
     Toast.makeText(this, "В данной категории нет слов", Toast.LENGTH_LONG).show(); 
     this.finish(); 
    } 

    makeQuestion(); 

mQuestionsは空のArrayListであり、私はcountは常にログに0に等しいことがわかります。また、私はいつも私のログに1/111レコードを参照してください。しかし、私の活動は仕上げ方法をしない!

makeQuestionは、空の場合にはmQuestion(例外をスロー)する必要がない方法です。しかし、もし私がmakeQuestionのコメントをしたら、finishメソッドはうまくいきます!このコードのメソッドはメインスレッドで動作します(onCreate()メソッドから実行されます)。

私が間違っている場所を教えてください。

ありがとうございます。

答えて

4

finish()関数は非ブロック化です。つまり、アクティビティがバックグラウンドで終了している間に実行が継続されます。

問題を解決するには、finish()コールの後にreturn文を追加します。

1

finish()を呼び出すと、returnを呼び出すと同様のブロッキング効果がないことは間違いありません。

コードに基づいて、finish()のブロック効果はreturnであると仮定しています。

これを試してみてください:

mQuestions=DictionaryDbWrapper.getInstance().getQuestionsSequence(
     this.getIntent().getStringExtra(ApplicationUtilities.TEST_CATEGORY_PARAMETER), 50); 
mQuestionsCount=mQuestions.size(); 
Log.e("count", String.valueOf(mQuestionsCount)); 
if (mQuestionsCount==0) { 
    Log.e("1", "111"); 
    Toast.makeText(this, "В данной категории нет слов", Toast.LENGTH_LONG).show(); 
    this.finish(); 
} 
else { 
    makeQuestion(); 
} 
関連する問題