1

スケジュールされた期間にビューを更新する方法を教えてください。たとえば、毎秒。

MyService.wm.updateViewLayout(mView, mLayoutParams);

私が抱えている問題は、別のスレッドで実行されるタイマーを使用したときに、ビューを更新して次のエラーを発生させることができないことです。

04-08 01:19:35.910: W/dalvikvm(11040): threadid=13: キャッチされない例外で終了するスレッド (group=0x40a3e1f8) 04-08 01:19:35.910: E/AndroidRuntime(11040): 致命的な例外: スレッド-1376 04-08 01:19:35.910: E/AndroidRuntime(11040): android.view.ViewRootImpl$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。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):

同じアクティビティまたはサービスから更新しようとすると、ハングして他に何もしません。ループで実行しているだけです。

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

それで、これを行う正しい方法を教えてください。または、レイヤーを更新するための回避策を教えてください。

4

1 に答える 1