0

スレッドが開始したら、anAtomicBooleanを true に設定します。最後に、関連する Handler で false にリセットします。

スレッドの終了前に画面の向きを変更すると:

  • onSaveInstanceState() は、このブール値が TRUE であることを出力します
  • onPause() も TRUE を出力します。-> 論理的

スレッドが終了し、方向を再度変更します。

  • My Log.e "Bool" は FALSE を出力します -> OK
  • onSaveInstanceState() は TRUE を出力します -> 問題
  • onPause() は TRUE を出力します -> 問題
  • onCreate() は TRUE を出力します -> 問題

OnCreate():

if (savedInstanceState != null) {
    boolLocThread.set(savedInstanceState.getBoolean("boolLocThread"));
    Log.i("APP", "load LOC: " + boolLocThread.get());
    if (boolLocThread.get()) {
       Log.i("APP", "show progressDialog again");
       progressDialog = ProgressDialog.show(App.this, "", "Loading...", true);              
    }
}

ハンドラ:

Handler handlerLoc = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Log.i("APP", "Handler received (LOC)");
        Log.i("APP", "Suppress progressDialog (LOC)");
        progressDialog.dismiss();
        boolLocThread.set(false);
        Log.e("APP", "Bool: " + String.valueOf(boolLocThread.get()));

    }
};

OnSaveInstanceState:

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean("boolLocThread", boolLocThread.get());
    Log.i("APP", "save LOC: " + boolLocThread.get());           
}

OnStop メソッドでは、ブール値を false に設定し、OnPause メソッドでは、progressDialog が存在する場合は破棄します。終了前に画面を回さなければ、bool は FALSE にリセットされ、問題はありません。ブール値を正しくリセットするにはどうすればよいですか? ありがとう

4

0 に答える 0