show code block

2017年3月17日 星期五

執行緒 ─ Thread、Handler

執行緒大全:

執行緒一

http://givemepass.blogspot.tw/2015/10/hello_90.html

thread的使用方式

public class MyTask implements Runnable{
    public void run(){
        //execute your task
    }
}
new Thread(new MyTask()).start();


執行緒二

http://givemepass-blog.logdown.com/posts/296942-how-to-use-the-thread-2

//新建(尚未啟動的狀態)
new Thread(myRunnable);

//Runnable(進入可排程系統, 只要排程器(Scheduler)指派它給CPU執行, 則會開始執行run方法。)
new Thread(myRunnable).start();

flag 為一個Boolean值,讓flag == false 就可以停止Thread

new Thread(new Runnable(){
    public void run(){
        while(flag){
            //task

        }
    }
}).start();

Thread thread = new Thread(new Runnable(){
    public void run(){
       try{
           //task

       } catch(InterruptExcetption e){
           //handle exception

       }
    }
});
thread.start();
thread.interrupt();

當啟動Thread以後, 想要停止就呼叫Interrupt則會發出Exception來停止Thread。

如何使用Handler

http://givemepass-blog.logdown.com/posts/296606-how-to-use-a-handler

//runOnUiThread幫你另開執行緒,結束ui後回到主要執行緒。
new Thread(new Runnable() {
    public void run() {
        //這邊是背景thread在運作, 這邊可以處理比較長時間或大量的運算

        ((Activity) mContext).runOnUiThread(new Runnable() {
            public void run() {
                //這邊是呼叫main thread handler幫我們處理UI部分              

            }
        });
    }
}).start();



到這裡,你一定會疑惑handler的實質上到底幹嘛的,這時候就可以看這一篇。

Android 執行緒 - Thread 與 Handler

http://andcooker.blogspot.tw/2012/09/android-thread-handler.html




其它很棒的延伸


如何使用HandlerThread
http://givemepass-blog.logdown.com/posts/296790-how-to-use-handlerthread

如何使用AsyncTask
http://givemepass-blog.logdown.com/posts/297108-how-to-use-asynctask

如何使用ThreadPool
http://givemepass-blog.logdown.com/posts/296960-how-to-use-the-threadpool

如何使用ThreadPool 來下載網路圖片
http://givemepass-blog.logdown.com/posts/289636-how-to-use-the-threadpool-to-download-pictures

當你上面全部看完之後,最後來幫你搞懂

如何了解Task、Thread、ThreadPool、Handler、Looper、Message、MessageQueue、AsyncTask
http://givemepass-blog.logdown.com/posts/297175-how-to-understand




簡易使用
new Handler().postDelayed(new Runnable(){
   public void run(){
       //處理少量資訊或UI
   }
}, 3000);

new Thread(new Runnable() {
    public void run() {
        //這邊是背景thread在運作, 這邊可以處理比較長時間或大量的運算
        ((Activity) mContext).runOnUiThread(new Runnable() {
            public void run() {
                //這邊是呼叫main thread handler幫我們處理UI部分          
            }
        });
    }
}).start();
//或者

view.post(new Runnable(){
    public void run(){
        //更新畫面
    }
});

//又或者另外一種寫法
private Handler mHandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what){
            case 1:
                //處理少量資訊或UI
            break;
        }
    }
};

new Thread(new Runnable(){
    public void run(){
        Message msg = new Message();
        msg.what = 1;
        mHandler.sendMessage(msg);
    }
});

沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...