Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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 PostDelayed或带有Thread.sleep()的线程_Android - Fatal编程技术网

Android PostDelayed或带有Thread.sleep()的线程

Android PostDelayed或带有Thread.sleep()的线程,android,Android,如果我需要每秒钟更新一次UI组件(如textview),只要活动可见。您建议创建一个线程(使用thread.sleep)来调用postOnUi,还是使用处理程序来处理postDelayed 如果我有多个文本视图,我不确定哪一个更有效 谢谢?我想你把一些概念弄混了处理程序的postDelayed()确实会在一段时间后运行Runnable,但只运行一次 对于您想做的事情,您有几种选择: 睡眠线程就是其中之一。这样做的一个缺点是线程可能会导致异常,这样您的执行可能会变得不稳定。此外,您将只有一个线程

如果我需要每秒钟更新一次UI组件(如textview),只要活动可见。您建议创建一个线程(使用thread.sleep)来调用postOnUi,还是使用处理程序来处理postDelayed

如果我有多个文本视图,我不确定哪一个更有效


谢谢?

我想你把一些概念弄混了<代码>处理程序的
postDelayed()
确实会在一段时间后运行
Runnable
,但只运行一次

对于您想做的事情,您有几种选择:

  • 睡眠
    线程
    就是其中之一。这样做的一个缺点是
    线程
    可能会导致异常,这样您的执行可能会变得不稳定。此外,您将只有一个
    线程
    ,即使它处于睡眠状态,您也无法释放它,因此您正在使用一次可能不需要的资源
  • 另一种方法是使用
    AsyncTask
    。但是,对于短期任务,建议这样做。如果计划长时间运行此任务,
    AsyncTask
    可能不是一个好选择
  • 您可以使用
    处理程序运行后台
    服务
    ,以更新UI。取决于你想要达到的目标
  • 您可能想看看
    ScheduledExecutorService
    。它有一个名为
    scheduleAtFixedRate()
    的方法,该方法将准确地执行该操作,在其中一个参数指定的每个X时间执行一个
    Runnable
    。更多信息

谢谢您的回答。我应该澄清一下。我所说的postDelayed,是指每隔x秒调用一次自己。有一件事我不明白,你所说的“拥有一个线程不会释放资源”是什么意思。当您调用thread.sleep时,它为UI线程和其他线程提供了执行工作的机会。我喜欢你的最后一个选项,除了它似乎不在UI线程上执行,所以我还必须将它发布到UI线程控制确实是给UI线程的,但是你仍然将
线程加载到内存中,因此它不会被释放,而是等待下一次执行。然而,这不应该是一个问题,但是你问到了效率,所以我只是注意到了这一点。对于UI问题,请查看以下内容,这可能会有所帮助: