Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在我的应用程序中从重置状态停止屏幕方向更改_Android_Multithreading_Atomicboolean - Fatal编程技术网

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->问题
OnCreate():

处理程序:

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());           
}