Android Studio多執行緒處理

 Android Studio多執行緒處理

Thread

Java的標準執行續
如果需要長時間執行Thread會比較適合
無法直接與UI溝通,如果需要修改UI必須通過其他類別來設定

基本應用

第一種

與Runnable搭配使用
Thread mThread = new Thread( rnb ) ;
mThread. start() ;

private Runnable rnb = new Runnable ()
{
     public void run ()
    {
          // 執行的動作
     }
} ;

第二種

建class繼承Thread
private CThread mThread ;

mThread = new CThread() ;
mThread .start() ;

private class extends Thread
{
     @Override
    public void run ()
     {
          // 執行的動作
     }
}

額外應用

可以搭配第二種方式製造不斷執行的執行緒
isInterrupted()為檢測該執行緒是否中斷
while (!isInterrupted())
{

}

mThread.isAlive()使用Boolean的方式指出目前執行緒的執行狀態
mThread.getState()返迴執行緒的確切狀態

Handler

主要處理背景執行緒與主執行緒之間的溝通

基本應用

第一種

跟Thread一樣可以與Runnable搭配使用
Handler mhandler = new Handler() ;
mhandler.post( r1 ) ;

private Runnable r1 = new Runnable ()
{
     public void run ()
    {
          // 執行的動作
     }
} ;

第二種

與Message搭配使用
Message mssg = new Message() ;
mssg. what = 1 ;
mHandler .sendMessage(mssg) ;

private Handler mHandler = new Handler()
{
    @Override
    public void handleMessage (Message msg)
    {
        switch (msg. what )
        {
            case 1 :

                break;
        }
    }
} ;

AsyncTask

能夠同時在後台進行資料處理短時間操作
官方建議短時間操作

基本應用

Task task = new Task() ;
task.execute() ;

private class Task extends AsyncTask<String, Void, String> {
/*
onPreExecute -- AsyncTask 執行前的準備工作
doInBackground -- 實際要執行的程式碼就是寫在這裡,
onProgressUpdate -- 用來顯示目前的進度,
onPostExecute -- 執行完的結果 - Result 會傳入這裡。
*/
protected void onPreExecute() {
//執行前 設定可以在這邊設定
super.onPreExecute();
}

@Override
protected String doInBackground(String... params) {
//執行中 在背景做事情
return null;
}

@Override
protected void onProgressUpdate(Void... values) {
//執行中 可以在這邊告知使用者進度
super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String bitmap) {
//執行後 完成背景任務
super.onPostExecute(bitmap);
}

}

留言