AsyncTask机制学习
其内容可以参考http://blog.csdn.net/webgeek/article/details/17298237 1,首先创建一个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, 1); toast.setGravity(Gravity.TOP, 0, 100); 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); } } 2,然后在要调用的地方开始执行即可 例如在获取一帧预览数据后,开始处理,如下: @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); 
posted on 2015-08-19 17:57 Sanny.Liu-CV&&ML 阅读(304) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号