zoukankan      html  css  js  c++  java
  • AsyncTask机制学习 Sanny.Liu

    其内容可以参考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);
     
  • 相关阅读:
    [Angular 9] Built-in template syntax $any
    [Angular 9] Improved Dependency Injection with the new providedIn scopes 'any' and 'platform'
    [Angular 9 Unit testing] Stronger typing for dependency injection in tests
    [Angular] Preserve the current route’s query parameters when navigating with the Angular Router
    [Angular] Do relative routing inside component
    [Typescript] Make your optional fields required in TypeScript
    [Typescript] Exclude Properties from a Type in TypeScript
    [Javascript] Hide Properties from Showing Up in "for ... in" Loops in JavaScript
    [Debug] Set and remove DOM breakpoints
    【职业素养】4种让你显得没教养的做法
  • 原文地址:https://www.cnblogs.com/hansjorn/p/4742975.html
Copyright © 2011-2022 走看看