Thread.Sleep发布android方法和asynctask

时间:2015-02-05 19:55:13

标签: android android-asynctask

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

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

const_val将是常量,并且不会被任何其他方法更改。表示该值将是5.update_val将在调用Asynctask时更新和递减,并且让值为10.因此,while循环执行直到条件为真且异步,才会调用睡眠。

当我在一般方法中使用上面的while循环时,UI被锁定,如果我在另一个asynctask中使用相同的循环,则会出现错误,“只有创建视图层次结构的原始线程才能触及其视图”

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我认为你不应该使用周围的循环。看看这个例子:

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

  • AsyncTask是私有内部类
  • onPostExecute使用消息更新UI /取消加载栏

这样你就不必循环,onCreate()可以立即返回。