android中的异步,AsyncTask,HandlerThread

 Android除了能用java的Thread创建异步任务
 android还提供了以下异步工具
 1.AsyncTask。在后工作了,可以自定义发给主线程状态,完成时把结果发给主线程。
 2.HandlerThread。是android提供的带消息循环的Thread。
       // 创建对象,并启动该线程
        HandlerThread mHandlerThread = new HandlerThread("sub_thread");
        mHandlerThread.start();
        // 一定要传刚创建的线程的Looper,要不然handlermessage不再子线程中执行
        Handler mHandler = new Handler(mHandlerThread.getLooper()); 
 3.自定义带消息循环的Thread(就是在run函数中加Looper.prepare();Looper.loop();在这两个被调中间定义handler。退出消息循环用 Looper.myLooper().quit())

				new AsyncTask<Integer, Integer, Integer>() {

					protected void onPreExecute() {
						Log.i(TAG, "异步子线程开始前");

					}

					@Override
					protected Integer doInBackground(Integer... params) {
						Log.i(TAG, "doInBackground 传参:" + params[0]);
						for (int i = 0; i < 10; i++) {
							publishProgress(i);
						}
						return 2;
					}

					protected void onProgressUpdate(Integer... values) {
						Log.i(TAG, "doInBackground 更新进度为:" + values[0]);
					}

					protected void onPostExecute(Integer result) {
						Log.i(TAG, "doInBackground 返回结果为:" + result);
					}
				}.execute(1);
 class LooperThread extends Thread {  
        private Handler mHandler;  
        private final Object mSync = new Object();  
  
        public void run() {  
            Looper.prepare();
			//加锁是为了 getHandler()不为空,必须的
            synchronized (mSync) {  
                mHandler = new Handler(){  
                    @Override  
                    public void handleMessage(Message msg) {  
                        Log.d("CYQ", "--->" + msg);  
                    }  
                };  
                mSync.notifyAll();  
            }  
            Looper.loop();  
        }  
          
        public Handler getHandler() {  
            synchronized (mSync) {  
                if (mHandler == null) {  
                    try {  
                        mSync.wait();  
                    } catch (InterruptedException e) {  
                    }  
                }  
                return mHandler;  
            }  
        }  
        public void exit() {  
            getHandler().post(new Runnable(){  
                public void run() {  
                    Looper.myLooper().quit();  
                }});  
        }  
    }  

  

猜你喜欢

转载自wenzongliang.iteye.com/blog/2164143