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);

日志错误:

    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

因为定时器任务将在单独的线程中启动。但是View由 UI 线程创建的不能被任何其他人触及。正如错误所说。

于 2012-10-05T10:35:59.820 回答
0
    private Handler handler =  new Handler(){

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

将上面的代码添加到你的类并从运行中调用这个方法 handler.sendMessage(Message message)

于 2012-10-05T10:46:31.493 回答