1

インターフェイスを設定する別のクラスからオブジェクトのパラメーターを適切に設定しています。今、私は同じことをする必要がありますが、タイマーによって遅れています. そのために、適切に呼び出されるタイマー タスクを使用していますが、別のアクティビティからパラメーターを設定する必要があるときにクラッシュします。それに到達する方法は?

        TimerTask task = new TimerTask() {
                        public void run() {
                            anotherClass.aBridge.button_back.setVisibility(View.INVISIBLE); //working fine outside timer
                        }
                    };

                    Timer timer = new Timer();
                    timer.schedule(task, 5000);

logcat エラー:

    10-05 12:26:58.083: E/AndroidRuntime(9815): FATAL EXCEPTION: Timer-0
    10-05 12:26:58.083: E/AndroidRuntime(9815): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.ViewRoot.checkThread(ViewRoot.java:2990)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:663)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:689)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2604)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.View.invalidate(View.java:5374)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.View.setFlags(View.java:4723)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at android.view.View.setVisibility(View.java:3183)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at webPush$6.run(webPush.java:274)
    10-05 12:26:58.083: E/AndroidRuntime(9815):     at java.util.Timer$TimerImpl.run(Timer.java:284)
4

3 に答える 3

1

バックグラウンド スレッドから UI を更新することはできません。UI スレッドからのみ UI を更新できます。runOnUiThread(runnable_instance)非 UI スレッドから UI を更新するために使用します。

于 2012-10-05T10:34:07.163 に答える
0
    private Handler handler =  new Handler(){

    @Override
    public void handleMessage(Message msg) {
        //do ur work
}};

上記のコードを ur クラスに追加し、実行からこのメソッド handler.sendMessage(Message message) を呼び出します

于 2012-10-05T10:46:31.493 に答える
0

タイマータスクは別のスレッドで開始されるためです。ただし、ViewUI スレッドによって作成されたスレッドは、他のスレッドからは操作できません。エラーが言うように。

于 2012-10-05T10:35:59.820 に答える