スレッドが開始したら、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 にリセットされ、問題はありません。ブール値を正しくリセットするにはどうすればよいですか? ありがとう