Thread.Sleep 发布 android 方法和异步任务

Thread.Sleep issue android methods and asynctask

我正在开发每 8 秒更新一次数据的应用程序,并且更新是使用异步任务完成的。我正在使用循环来实现这个条件

while(const_val > update_val) {
new Asynctask().execute();
Thread.sleep(8000);
}

const_val 将是常量,不会被任何其他更改 methods.lets 说这个值将是 5.update_val 将在调用 Asynctask 时更新和递减,让我们的价值将是 10。因此,while 循环执行直到条件为真并且调用 asynctask、sleep。

当我在通用方法中使用上面的 while 循环时,UI 被锁定,如果我在另一个异步任务中使用相同的循环,则会出现错误 "Only original thread that created a view hierarchy can touch its view "

您需要更改代码以启动 AsyncTask 并让它通过其 onPostExecute() 方法提供更新。通过调用 Thread.sleep() 你正在休眠你的应用程序的主线程(或 UI 线程),这是不好的。你永远不想阻塞主线程。本文可能会帮助您更好地理解 AsyncTask 和 Android 中的线程:http://po.st/Cei3m2

我认为您不应该使用环绕循环。看这个例子:

http://javatechig.com/android/progress-notification-in-android-example

  • AsyncTask 是私有内部 class
  • onPostExecute 使用 message/cancels 加载栏
  • 更新 UI

这样您就不必循环,并且 onCreate() 可以立即 return。