Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中启动线程的正确方法_Android - Fatal编程技术网

android中启动线程的正确方法

android中启动线程的正确方法,android,Android,我需要一个定时器,它将发送一个消息,为其'处理程序。我创建了一个实现Runnable的类,并将其“对象”馈送给thread Runnable构造函数。当我启动线程时,它挂起应用程序,显然它不是异步工作的。我本可以使用AsyncTask,但我也听说它们是为短期操作而设计的,而我的后台计时器必须在整个活动状态下工作。请你指出我的错误,并提供关于android线程主题的有用链接,好吗。谢谢 以下是我编写的代码: @Override public void onResume() { // TOD

我需要一个定时器,它将发送一个消息,为其'处理程序。我创建了一个实现Runnable的类,并将其“对象”馈送给thread Runnable构造函数。当我启动线程时,它挂起应用程序,显然它不是异步工作的。我本可以使用AsyncTask,但我也听说它们是为短期操作而设计的,而我的后台计时器必须在整个活动状态下工作。请你指出我的错误,并提供关于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();
            }
        }
    }
}

您应该始终使用Thread.start()而不是Thread.run() run()与普通方法调用类似,在同一线程上运行

使用


:-D这太尴尬了,现在已经快凌晨3点了:P别担心,这发生在我们当中最好的人身上:Dbtw你通常想覆盖handleMessage而不是dispatchMessage
_myThread.start();