Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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:处理程序postdelay方法是否使用更新的私有变量执行?_Android_Private_Android Handler_Postdelayed - Fatal编程技术网

Android:处理程序postdelay方法是否使用更新的私有变量执行?

Android:处理程序postdelay方法是否使用更新的私有变量执行?,android,private,android-handler,postdelayed,Android,Private,Android Handler,Postdelayed,我想问一个一般性的延迟后问题。所以我在我的应用程序中使用了这种方法,但它似乎并不像我预期的那样工作 我想检查的是说: private boolean privateVariable = false // private instance field new Handler().postDelayed(new Runnable() { @Override public void run() { if(privateVariable))

我想问一个一般性的延迟后问题。所以我在我的应用程序中使用了这种方法,但它似乎并不像我预期的那样工作

我想检查的是说:

private boolean privateVariable = false    // private instance field
new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if(privateVariable)) {       
                //DO SOMETHING
            }
        }
    }, 5000);
privateVariable在延迟的5秒内更新为true。 做什么事情会被执行

换句话说,当我们使用postdelay方法时,我们是在延迟时保存变量并在一定程度的延迟后使用它,还是在5秒后执行run()时使用更新的变量?它似乎在我的应用程序中保存了它,所以即使我在5秒延迟之间更改了它,它还是使用了我创建新处理程序时的原始处理程序

如果它使用保存的值,您能告诉我在一定时间后使用更新值的方法吗


提前谢谢。

是否执行了一些操作???
以及
Log.d
说了些什么?这取决于哪个线程正在更新变量,哪个线程附加了处理程序。如果您的处理程序是在主线程上创建的,并且您正在从某个后台线程更新变量,那么您将需要同步,比如将变量声明为volatile。@Jagroshan感谢您的评论。这就是我的应用程序的运行方式。当它启动时,它会启动一个服务,该服务在START_STICKY with startForeground()中后台运行,因为我希望在后台运行该服务,同时不容易被杀死。在该服务中,我有一个包含私有变量的活动,它在同一个活动中得到更新。处理程序也在同一活动中。还有什么建议吗?@pskink谢谢你的评论。显然,它似乎使用了保存的值。