在为android编程时出现MultiThreading问题

TiG*_*Ger 1 multithreading android

我正在Android上开发,但问题可能在任何其他Java平台上都同样有效.

我开发了一个多线程应用程序.假设我有一个需要执行时间密集型任务的第一类,因此这项工作在另一个Thread中完成.完成后,相同的Thread会将时间密集型任务结果返回给另一个(第3个)类.

最后一个类将执行某些操作并将其结果返回到第一个启动类.我注意到虽然第一堂课将一直等待,也许是因为这是某种循环?

另外我想让Thread-class停止运行,就像它将结果传递给第三类时它应该停止一样.第三类必须在没有被"封装"在第二类(线程一)的情况下完成它的工作.谁知道怎么做到这一点?

现在的经验是,第一个似乎在等待(悬挂)直到第二个和第三个完成:(

dav*_*e.c 11

如果你想使用线程而不是AsyncTask你可以做这样的事情:

private static final int STEP_ONE_COMPLETE = 0;
private static final int STEP_TWO_COMPLETE = 1;

...

private doBackgroundUpdate1(){
    Thread backgroundThread = new Thread() {
        @Override
        public void run() {
            // do first step

            // finished first step
            Message msg = Message.obtain();
            msg.what = STEP_ONE_COMPLETE;
            handler.sendMessage(msg);
        }
    }
    backgroundThread.start();
}
private doBackgroundUpdate2(){
    Thread backgroundThread = new Thread() {
        @Override
        public void run() {
            // do second step

            // finished second step
            Message msg = Message.obtain();
            msg.what = STEP_TWO_COMPLETE;
            handler.sendMessage(msg);
        }
    }
    backgroundThread.start();
}
private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what){
        case STEP_ONE_COMPLETE:
            doBackgroundUpdate2();
            break;
        case STEP_TWO_COMPLETE:
            // do final steps;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以通过打电话来启动它doBackgroundUpdate1(),当它完成时它会发送一个消息,handler然后启动doBackgroundUpdate2()等等.