最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android使用handlerthread創(chuàng)建線程示例

 更新時間:2014年01月11日 15:32:28   作者:  
這篇文章主要介紹了android使用handlerthread創(chuàng)建線程,講解了這種方式的好處及為什么不使用Thread類的原因

在android開發(fā)中,一說起線程的使用,很多人馬上想到new Thread(){...}.start()這種方式。
這樣使用當然可以,但是多次使用這種方式,會創(chuàng)建多個匿名線程。使得程序運行起來越來越慢。
因此,可以考慮使用一個Handler來啟動一個線程,當該線程不再使用就刪除,保證線程不會重復創(chuàng)建。
一般會使用Handler handler = new Handler(){...}創(chuàng)建Handler。這樣創(chuàng)建的handler是在主線程即UI線程下的Handler,
即這個Handler是與UI線程下的默認Looper綁定的。Looper是用于實現消息隊列和消息循環(huán)機制的。
因此,如果是默認創(chuàng)建Handler那么如果線程是做一些耗時操作如網絡獲取數據等操作,這樣創(chuàng)建Handler是不行的。
Android API提供了HandlerThread來創(chuàng)建線程。官網的解釋是: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。
創(chuàng)建HandlerThread時要把它啟動了,即調用start()方法。然后創(chuàng)建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;
    }

}
}

相關文章

最新評論

原阳县| 霞浦县| 双牌县| 新沂市| 秦皇岛市| 太白县| 颍上县| 鄄城县| 博客| 广西| 乳源| 齐齐哈尔市| 曲阳县| 崇文区| 隆化县| 彰化县| 安顺市| 邵阳市| 清镇市| 安远县| 孝感市| 洪雅县| 高青县| 阿瓦提县| 威海市| 邛崃市| 元阳县| 东至县| 晴隆县| 长春市| 安福县| 水城县| 乌审旗| 射阳县| 鄂尔多斯市| 木兰县| 瑞丽市| 新昌县| 清镇市| 武宣县| 庆云县|