2013-04-08 23 views
1

一个视图可有一个人请告诉我如何更新在预定期限的视图。例如每秒钟。那我有如何更新预定期限

MyService.wm.updateViewLayout(mView, mLayoutParams); 

问题是,当我用了一个定时器它在不同的线程上运行,它是不允许我更新视图,并给予下列错误。

1月4日至8日:19:35.910:W/dalvikvm(11040):线程ID = 13:螺纹与未捕获的异常(组= 0x40a3e1f8)1月4日至8日离开 :19:35.910: E/AndroidRuntime (11040):致命例外:Thread-1376 04-08 01:19:35.910:E/AndroidRuntime(11040): android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的 原始线程可以触摸其视图。 01/19:35.910:E/AndroidRuntime(11040):at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)04-08 01:19:35.910:E/AndroidRuntime(11040): Android.view.View.requestLayout(View.java:12680)04: 01:19:35.910:E/AndroidRuntime(11040):at android.view.View.requestLayout(View.java:12680)04 -08 01:19:35.910: E/AndroidRuntime(11040):at android.view.View.setLayoutParams(View.java:8223)04-08 01:19:35.910: E/AndroidRuntime(11040):at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:312) 04-08 01:19:35.910:E/AndroidRuntime(11040):at android.view.WindowManagerIm pl $ CompatModeWrapper.updateViewLayout(WindowManagerImpl.java:145) 04-08 01:19:35.910:E/AndroidRuntime(11040):at 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)

当我试图从同一活动或服务的更新它挂起而没有做任何其他事情。只是在循环中运行。

while (true) { 
    MyService.UpdateLayers(); 
    try { 
     Thread.sleep(1000L); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

所以,你能告诉我正确的方法来做到这一点或解决更新图层。

回答

3

你可以尝试用处理程序。你这样定义this.-

protected Handler handler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) { 
     switch(msg.what) { 
      case DO_SOME_VIEW_CHANGES: 
      { 
       // Your logic 
       break; 
      } 
     } 
    } 
}; 

在你的主线程处理程序。然后,你需要创建一个接收处理程序实例的线程,并调用内部it.-

handler.sendEmptyMessage(DO_SOME_VIEW_CHANGES);

希望它帮助。

+0

谢谢我会试试这个 – SAN 2013-04-08 21:46:00