麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Android > 正文

android使用handlerthread創建線程示例

2020-04-11 11:57:26
字體:
來源:轉載
供稿:網友

在android開發中,一說起線程的使用,很多人馬上想到new Thread(){...}.start()這種方式。
這樣使用當然可以,但是多次使用這種方式,會創建多個匿名線程。使得程序運行起來越來越慢。
因此,可以考慮使用一個Handler來啟動一個線程,當該線程不再使用就刪除,保證線程不會重復創建。
一般會使用Handler handler = new Handler(){...}創建Handler。這樣創建的handler是在主線程即UI線程下的Handler,
即這個Handler是與UI線程下的默認Looper綁定的。Looper是用于實現消息隊列和消息循環機制的。
因此,如果是默認創建Handler那么如果線程是做一些耗時操作如網絡獲取數據等操作,這樣創建Handler是不行的。
Android API提供了HandlerThread來創建線程。官網的解釋是:Handy class for starting a new thread that has a looper.
The looper can then be used to create handler classes. Note that start() must still be called.
HandlerThread實際上就一個Thread,只不過它比普通的Thread多了一個Looper。
創建HandlerThread時要把它啟動了,即調用start()方法。然后創建Handler時將HandlerThread中的looper對象傳入。

復制代碼 代碼如下:

HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler.post(new Runnable(){...});

那么這個Handler對象就是與HandlerThread這個線程綁定了(這時就不再是與UI線程綁定了,這樣它處理耗時操作將不會阻塞UI)。 下面是代碼說明:

復制代碼 代碼如下:

public class MainActivity extends Activity implements OnClickListener{
private Handler mHandler;
private HandlerThread mHandlerThread;

private boolean mRunning;

private Button btn;

@Override
protected void onDestroy() {
    mRunning = false;
    mHandler.removeCallbacks(mRunnable);
    super.onDestroy();
}

@Override
protected void onResume() {
    mRunning = true;
    super.onResume();
}

@Override
protected void onStop() {
    mRunning = false;
    super.onStop();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(this);

    mHandlerThread = new HandlerThread("Test", 5);
    mHandlerThread.start();
    mHandler = new Handler(mHandlerThread.getLooper());
}

private Runnable mRunnable = new Runnable() {

    @Override
    public void run() {
        while (mRunning) {
            Log.d("MainActivity", "test HandlerThread...");
            try {
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
};

@Override
public void onClick(View v) {
    switch(v.getId()) {
    case R.id.btn :
        mHandler.post(mRunnable);
        break;
    default :
        break;
    }

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天堂在线资源av | 欧美a级在线免费观看 | 国产免费久久久久 | 国产精品av久久久久久久久久 | 国产一区精品在线观看 | 欧美色大成网站www永久男同 | 欧美成人精品一区二区 | 久久免费视频一区 | 欧产日产国产精品99 | 羞羞视频免费观看网站 | 国产一级aaa全黄毛片 | 中文字幕涩涩久久乱小说 | 精品一区二区三区在线观看视频 | 欧美一级毛片欧美一级成人毛片 | 亚洲精品日韩色噜噜久久五月 | 91成人在线免费视频 | 日韩毛片一区二区三区 | 免费毛片播放 | av不卡免费在线 | 国产一级一级片 | 成人福利网 | 成人毛片100部 | 精品一区二区6 | 欧美精品激情视频 | va免费视频 | 国产精品午夜一区 | 久久99深爱久久99精品 | 亚洲网在线观看 | 狼人狠狠干 | 最新毛片在线观看 | 激情夜色 | 日韩中文字幕一区二区三区 | 国产午夜精品久久久久久免费视 | 午夜国产小视频 | 久久99精品久久久久久园产越南 | 国产精品久久久久久影视 | 视频一区二区三区在线播放 | 久久久久久久久成人 | 粉嫩粉嫩一区二区三区在线播放 | 国产精品久久77777 | 欧美久久久久久久久 |