其内容可以参考http://blog.csdn.net/webgeek/article/details/17298237
,首先创建一个AsyncTask类
class GetFaceDetectTask extends AsyncTask<byte[],Integer,Integer> { //第一个参数是传递过来的参数,第二个是返回
//第一个byte[]代表输入到任务的参数类型,也即是doInBackground()的参数类型
//第二个Integer代表处理过程中的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息
//传递给onProgressUpdate()一般用来更新界面
//第三个Integer代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型
@Override
protected Integer doInBackground(byte[]... params) {
// TODO Auto-generated method stub
int result = facedetector.run();
return result;
//在执行过程中可以调用publicProgress(Progress...)来更新任务的进度
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
@Override
protected void onPostExecute(Integer result) { //处理完后代用
// TODO Auto-generated method stub
super.onPostExecute(result);
Toast toast = Toast.makeText(CameraActivity.this, "the detect result: "+result, );
toast.setGravity(Gravity.TOP, , );
toast.show();
shutterBtn.setClickable(true);
}
@Override
protected void onPreExecute() { //执行前预处理
// TODO Auto-generated method stub
super.onPreExecute();
shutterBtn.setClickable(false);
}
@Override
protected void onProgressUpdate(Integer... values) { //处理过程代用,可以用于更新UI
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
,然后在要调用的地方开始执行即可
例如在获取一帧预览数据后,开始处理,如下:
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int mwidth = mCamera.getParameters().getPreviewSize().width;
int height =mCamera.getParameters().getPreviewSize().height;
GetFaceDetectTask task = new GetFaceDetectTask();
task.execute(data);
}
3,传递多个不同类型的参数给异步任务(http://codego.net/495279/)
private static class MyTaskParams {
int foo;
long bar;
double arple;
MyTaskParams(int foo, long bar, double arple) {
this.foo = foo;
this.bar = bar;
this.arple = arple;
}
}
private class MyTask extends AsyncTask<MyTaskParams, Void, Void> {
@Override
protected void doInBackground(MyTaskParams... params) {
int foo = params[0].foo;
long bar = params[0].bar;
double arple = params[0].arple;
...
}
}
这样调用它:
MyTaskParams params = new MyTaskParams(foo, bar, arple);
MyTask myTask = new MyTask();
myTask.execute(params);