2013-04-08 48 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