【发布时间】:2013-03-29 23:29:21
【问题描述】:
谁能告诉我如何在预定时间段更新视图。例如每秒。
MyService.wm.updateViewLayout(mView, mLayoutParams);
我遇到的问题是,当我使用在不同线程上运行的计时器时,它不允许我更新视图并给出以下错误。
04-08 01:19:35.910: W/dalvikvm(11040): threadid=13: 线程退出 未捕获的异常(组=0x40a3e1f8)04-08 01:19:35.910: E/AndroidRuntime(11040):致命异常:Thread-1376 04-08 01:19:35.910:E/AndroidRuntime(11040): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有 创建视图层次结构的原始线程可以触及其视图。 04-08 01:19:35.910: E/AndroidRuntime(11040): 在 android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039) 04-08 01:19:35.910:E/AndroidRuntime(11040):在 android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:709) 04-08 01:19:35.910:E/AndroidRuntime(11040):在 android.view.View.requestLayout(View.java:12680) 04-08 01:19:35.910: E/AndroidRuntime(11040):在 android.view.View.setLayoutParams(View.java:8223) 04-08 01:19:35.910: E/AndroidRuntime(11040):在 android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:312) 04-08 01:19:35.910: E/AndroidRuntime(11040): 在 android.view.WindowManagerImpl$CompatModeWrapper.updateViewLayout(WindowManagerImpl.java:145) 04-08 01:19:35.910: E/AndroidRuntime(11040): 在 com.example.MyService.UpdateLayers(TrackerService.java:353) 04-08 01:19:35.910: E/AndroidRuntime(11040): 在 com.example.MainActivity$5$1.run(MainActivity.java:219)
当我尝试从同一个 Activity 或服务更新它时,它会挂起而不做任何其他事情。只是在循环中运行。
while (true) {
MyService.UpdateLayers();
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
那么,你能告诉我正确的方法来更新图层吗?
【问题讨论】:
标签: android multithreading view timer android-windowmanager