我有以下CameraPreview类,它具有此setPreviewCallback实现它将运行一个静态线程。Android - 线程问题。一个静态工作线程和两个不同的AsyncTasks
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尚未完成。我对吗??
新的TaskOne().execute(.....)刚开始执行TaskOne,它不会等到它结束......所以如果“如果”statment依赖于在TaskOne中所做的更改,它将永远不会是真的..无论如何,没有必要使用多个AsyncTask,尤其是当你使用新线程时... – Selvin 2012-02-08 13:26:40
if语句不依赖于TaskOne。我需要一个新的AsyncTask,因为他们都在做一个单独的任务。 – humansg 2012-02-08 14:53:36