Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更新计划时段的视图_Android_Multithreading_View_Timer_Android Windowmanager - Fatal编程技术网

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(查看一些更改)

希望能有帮助