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。
我正在开发每 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。