我有以下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还没有完成。我是对的吗?
答案 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)