Android 如何更新计划时段的视图
有人能告诉我如何在预定的时间段内更新视图吗。比如每秒钟Android 如何更新计划时段的视图,android,multithreading,view,timer,android-windowmanager,Android,Multithreading,View,Timer,Android Windowmanager,有人能告诉我如何在预定的时间段内更新视图吗。比如每秒钟 MyService.wm.updateViewLayout(mView, mLayoutParams); 我遇到的问题是,当我使用计时器时,它在不同的线程上运行,它不允许我更新视图并给出以下错误 04-08 01:19:35.910:W/dalvikvm(11040):线程ID=13:线程正在退出 未捕获异常(组=0x40a3e1f8)04-08 01:19:35.910: E/AndroidRuntime(11040):致命异常:线程-
MyService.wm.updateViewLayout(mView, mLayoutParams);
我遇到的问题是,当我使用计时器时,它在不同的线程上运行,它不允许我更新视图并给出以下错误
04-08 01:19:35.910:W/dalvikvm(11040):线程ID=13:线程正在退出
未捕获异常(组=0x40a3e1f8)04-08 01:19:35.910:
E/AndroidRuntime(11040):致命异常:线程-1376 04-08
01:19:35.910:E/AndroidRuntime(11040):
android.view.ViewRootImpl$CalledFromErrorThreadException:只有
创建视图层次结构的原始线程可以接触其视图。
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):在
WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:312)
04-08 01:19:35.910:E/AndroidRuntime(11040):在
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):在
MainActivity$5$1.run(MainActivity.java:219)
当我试图从相同的活动或服务更新它时,它会挂起,而不做任何其他事情。只是在循环中运行
while (true) {
MyService.UpdateLayers();
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
所以,你能告诉我正确的方法吗?或者你可以试着用一个处理器来更新图层。您可以像这样在主线程上定义一个处理程序-
protected Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case DO_SOME_VIEW_CHANGES:
{
// Your logic
break;
}
}
}
};
然后,您需要创建一个线程来接收处理程序实例,并在其中调用-
handler.sendEmptyMessage(查看一些更改)代码>
希望能有帮助