android中的异步,AsyncTask,HandlerThread
16lz
2021-01-23
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, "异步子线程开始前");}@Overrideprotected 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(); }}); } }
更多相关文章
- Android中线程的使用方法
- Android UI主线程和子线程
- Android文档——进程优先级与线程
- android下发送中文短消息
- Android之 UI主线程ZT
- Android中的多线程
- 五.在Android中实现线程的方法