0

我需要一个计时器,它将为其处理程序发送消息。我创建了一个实现 Runnable 的类,并将其对象提供给线程可运行构造函数。当我启动线程时,它会挂起应用程序,显然它没有异步工作。我本可以使用 AsyncTask,但我也听说它们是为短期操作而设计的,而我的后台计时器必须在整个活动 onResumed 状态下工作。您是否介意指出我的错误,并可能提供有关 android 线程主题的有用链接。谢谢。

这是我写的代码:

@Override
public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    _myTimerInstance = new MyTimer(new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            // ...
        }
    });
    _myThread = new Thread(_myTimerInstance);
    _myThread.run();


}

private static class MyTimer implements Runnable {

    private Handler _myHandler;
    private boolean _activityHasBeenLeft;

    public MyTimer(Handler myHandler) {
        _myHandler = myHandler;
    }

    public void setActivityHasBeenLeft(boolean b) {
        _activityHasBeenLeft = b;
    }

    @Override
    public void run() {
        while (!_activityHasBeenLeft) {
            try {
                Thread.sleep(2000);
                _myHandler.sendEmptyMessage(0);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
4

1 回答 1

0

您应该始终使用 Thread.start() 而不是 Thread.run() Thread.run() 就像一个普通的方法调用,并且在同一个线程上运行。

采用

_myThread.start();
于 2012-08-21T22:24:37.420 回答