2013-04-08 2 views
1

Может кто-нибудь скажет мне, как обновить представление в запланированный период. например, каждую секунду.Как обновить представление в запланированный период

MyService.wm.updateViewLayout(mView, mLayoutParams); 

Проблема, что я имею, когда я использовал таймер его запуска на другом потоке, и это не позволяет мне обновить представление и дать следующее сообщение об ошибке.

04-08 01: 19: 35,910: Вт/dalvikvm (11040): ThreadId = 13: нити, выход щей с неперехваченным исключением (группа = 0x40a3e1f8) 04-08 01: 19: 35.910: Х/AndroidRuntime (11040): FATAL EXCEPTION: Thread-1376 04-08 01: 19: 35.910: E/AndroidRuntime (11040): android.view.ViewRootImpl $ CalledFromWrongThreadException: только исходный поток , создавший иерархию представлений, может коснуться его представлений , 04-08 01: 19: 35.910: E/AndroidRuntime (11040): at android.view.ViewRootImpl.checkThread (ViewRootImpl.java:4039) 04-08 01: 19: 35.910: E/AndroidRuntime (11040): at android.view.ViewRootImpl.requestLayout (ViewRootImpl.java:709) 04-08 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

Вы можете попробовать с помощью Handler. Вы определяете обработчик на основном потоке, как 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

Смежные вопросы