Android 如何在我的应用程序中从重置状态停止屏幕方向更改
当我的线程启动时,我将一个Android 如何在我的应用程序中从重置状态停止屏幕方向更改,android,multithreading,atomicboolean,Android,Multithreading,Atomicboolean,当我的线程启动时,我将一个AtomicBoolean设置为true。 最后,我在关联的处理程序中将其重置为false 在线程结束之前更改屏幕方向时: onSaveInstanceState()打印此布尔值为真 onPause()也打印为TRUE。 ->合乎逻辑 线程结束后,我再次更改方向: 我的日志.e“Bool”打印为FALSE->OK onSaveInstanceState()打印TRUE->问题 onPause()打印TRUE->Problem onCreate()打印TRUE->问
AtomicBoolean
设置为true。
最后,我在关联的处理程序中将其重置为false
在线程结束之前更改屏幕方向时:
- onSaveInstanceState()打印此布尔值为真
- onPause()也打印为TRUE。 ->合乎逻辑
- 我的日志.e“Bool”打印为FALSE->OK
- onSaveInstanceState()打印TRUE->问题
- onPause()打印TRUE->Problem
- onCreate()打印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方法中,我将boolean设置为false,在OnPause方法中,如果progressDialog存在,我将关闭它。
如果我没有在结束前打开屏幕,bool将重置为FALSE,并且没有问题。如何正确重置布尔值?谢谢您需要展示一些简洁的代码示例。否则我们将进行猜测。因此,
AtomicBoolean.set(false)
未被调用,或者,set(true)
在false之后被调用。您确定哪一个更有可能了吗?所以您再次更改了调用OnCreate()
的方向,对吗?这将覆盖boolLocThread
值。我不太明白你的savedInstanceState
的意思。因此,您的问题是,您是否可以检测到方向更改,并且仅在未发生更改时覆盖boolLocThread
值?当线程启动时,我会显示一个对话框。因此,当我打开时,我会重新打开对话框(以避免崩溃,因为它不再被识别),并在再次调用OnCreate()时显示一个新的对话框。这就是为什么我保留布尔值,以了解线程是否正在运行。
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("boolLocThread", boolLocThread.get());
Log.i("APP", "save LOC: " + boolLocThread.get());
}