Android - 线程问题。一个静态工作线程和两个不同的AsyncTasks

时间:2012-02-08 13:18:06

标签: android multithreading

我有以下CameraPreview类,它实现了这个setPreviewCallback,它将运行一个静态线程。

mCamera.setPreviewCallback(new Camera.PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera arg1) { 
        ...
        AThread thread = new AThread(data, ....);
        thread.start();
        Preview.this.invalidate();
        ....
    }
});

静态线程有两个AsyncTask(TaskOne和TaskTwo)。

private static final class AThread extends Thread {
    ...
    ...
    @Override
    public void run() {
        if (....) {
            Looper.prepare();
            new TaskOne().execute(.....);
            ...
            ...
            if (.............) {
                // Log.d(.....) // message is printed
                new TaskTwo().execute(.....); // doInBackground not executed.. why?
                // Log.d(.....) // message is NOT printed.. why??
            }
        }
    }
}

没有错误。 TaskOne将被执行。但是,即使条件为真,也不会执行TaskTwo。我做了一个Log.d但它确实进入了,但是TaskTwo从未被执行过。我认为存在线程/队列问题。任何人都可以帮我解决这个问题吗?

编辑: 我读帖子就像在一个线程上只能有一个AsyncTask。我认为没有添加TaskTwo,因为TaskOne还没有完成。我是对的吗?

2 个答案:

答案 0 :(得分:0)

您可以在一个AsyncTask中使用两个不同的Activity。我坚持不从任何线程调用AsyncTask,而是从Main UI thread本身执行。如果您遇到的问题是在调用前一个AsyncTask时可能正在运行,您可以在正在运行postExecute()的{​​{1}}中放置一个标记,以获取其已完成的状态。另一个是您可以尝试使用getStatus()获取AsyncTask的当前状态。

答案 1 :(得分:0)

尝试使用AsyncTask:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
  myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
  myTask.execute();
}

您似乎需要并行任务。 这里澄清一下: (link)