日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓线程相关 HandlerThread Handler Thread Looper Message Runnable

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓线程相关 HandlerThread Handler Thread Looper Message Runnable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文由PurpleSword(jzj1993)原創,轉載請注明 原文網址 http://blog.csdn.net/jzj1993
安卓主線程(UI線程)是線程不安全的:對UI控件的
操作都應在主線程中完成;UI線程不應執行耗時操作,以免程序不響應(即ANR異常)


實現新線程的常用方法(注意要調用start方法啟動新線程而不是run方法):
一、定義類,實現Runnable接口
? ??class?MyRunnable?implements?Runnable?{ ????????/** ?????????*?實現接口的run方法 ?????????*/ ????????@Override ????????public?void?run()?{ ????????????// run方法的中程序體將在新線程中執行 ????????} ????} ? ??new?Thread(new?MyRunnable()).start();

二、簡潔寫法
? ? ? ??new?Thread(new?Runnable()?{ ????????????@Override ????????????public?void?run()?{ ????????????????//?新線程操作 ????????????} ????????}).start();

三、定義類,繼承Thread(不推薦):
? ??class?MyThread?extends?Thread?{ ????????/** ?????????*?覆寫run方法 ?????????*/ ????????@Override ????????public?void?run()?{ ????????????//?新線程操作 ????????} ????} ????new?MyThread().start();

Thread和Runnable關系
? ??public?class?Thread?extends?Object?implements?Runnable { ????}

創建UI線程/主線程的Handler
一、(推薦寫法,用于不處理消息,只是接收Runnable的情況下)
? ??// 無參數實例化時,會創建當前正在運行線程(即主線程)的Handler ? ? Handler?handler?=?new?Handler();
如果handler需要處理消息,按照以下寫法將會產生警告This Handler class should be static or leaks might occur。此時可使用方法二)
????Handler?handler?=?new?Handler()?{ ????????@Override ????????public?void?handleMessage(Message?msg)?{ ????????????switch?(msg.what)?{ ????????????} ????????} ????};
二、(缺點在于需要定義一個新的類,寫起來比較麻煩)
? ??// 無參數實例化時,會創建當前正在運行線程(即主線程)的Handler ? ??private?Handler?handler?=?new?MyHandler()?{ ????????//?處理其他線程發送的消息 ????????@Override ????????public?void?handleMessage(Message?msg)?{ ????????????Log.d("msg",?"msg?what?=?"?+?msg.what); ????????????switch?(msg.what)?{ ????????????} ????????} ????};
????protected?static?class?MyHandler?extends?Handler?{ ????}
三、(推薦寫法,可用于接收Runnable和處理消息的情況下)
? ??boolean?handleMessage(Message?msg)?{ ????????switch?(msg.what)?{ ????????} ????????return?true; ????}
? ??private?final?Handler?mainHandler?=?new?Handler(Looper.getMainLooper(), ????????????new?Handler.Callback()?{ ? ? ? ? ? ? ? ??@Override ????????????????public?boolean?handleMessage(Message?msg)?{ ????????????????????return?ActivityMain.this.handleMessage(msg); ????????????????} ????????????});
在UI線程中執行程序
? ? ? ??handler.post(new?Runnable(){ ????????????@Override ????????????public?void?run()?{ ????????????????// 操作UI控件等... ????????????} ????????});

創建新線程的Handler
? ??private?HandlerThread?handlerThread; ????private?Handler?handler;
? ??this.handlerThread?=?new?HandlerThread(getClass().getSimpleName()); ????this.handlerThread.start(); ????this.handler?=?new?Handler(this.handlerThread.getLooper(), ????????????new?Handler.Callback()?{ ????????????????public?boolean?handleMessage(Message?msg)?{ ????????????????????return?NewThread.this.handleMessage(msg); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? });
? ??/** ?????*?處理消息 ?????*? ?????*?@param?msg ?????*?@return ?????*/ ????private?boolean?handleMessage(Message?msg)?{ ????????switch?(msg.what)?{ ????????} ????????return?true; ????}
通過Message進行線程間通信:在任意線程中向其他線程Handler發送消息
? ??/** ?????*?向線程Handler發送消息 ?????*? ?????*?@param?id ?????*?@param?o ?????*/ ????protected?void?sendMsg(int?id,?Object?o)?{ ????????if?(handler?!=?null)?{ ????????????Message?msg?=?Message.obtain(); ????????????msg.obj?=?o; ????????????msg.what?=?id; ????????????handler.sendMessage(msg); ????????} ????}
? ??/** ?????*?向線程Handler發送消息 ?????*? ?????*?@param?what ?????*/ ????protected?void?sendMsg(int?what)?{ ????????if?(handler?!=?null)?{ ????????????handler.sendEmptyMessage(what); ????????} ????}

? ??handler.sendMessageDelayed(msg,?milliseconds);
? ? Message.obtain(handler,?what,?obj).sendToTarget();
近期自己搭建了一個網站,以后我的博客會轉移到個人網站,歡迎大家關注~ 網址是http://purplesword.info



總結

以上是生活随笔為你收集整理的安卓线程相关 HandlerThread Handler Thread Looper Message Runnable的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。