android 37 執行緒通訊Looper

2021-09-08 11:24:45 字數 2576 閱讀 8414

安卓程式的主線程也叫ui執行緒。

工作執行緒和主線程的差別:安卓主線程已經呼叫了looper.prepare()方法了,已經有乙個messagequeue物件了,所以才可以在工作執行緒用handler發訊息到主線程:因為主線程有訊息佇列,發的訊息都存在佇列裡面,並且主線程已經有looper進行取訊息了。

自己建立的工作執行緒是沒有messagequeue和looper,所以不能向工作執行緒發訊息,因為沒有存訊息的地方和取訊息的東西。但是他可以有messagequeue和looper。

messagequeue是訊息佇列,looper輪訓從訊息佇列中取訊息,handler用於傳送和處理訊息。

mainactivity:

package

com.sxt.day06_02;

import

import

android.os.bundle;

import

android.os.handler;

import

android.os.looper;

import

android.os.message;

import

android.os.systemclock;

import

android.util.log;

import

android.view.view;

import

android.view.view.onclicklistener;

import

android.widget.progressbar;

import

android.widget.textview;

import

android.widget.toast;

public

class mainactivity extends

activity

private

void

createworkthread()

//迴圈結束後傳送完成訊息

message msg2 =message.obtain();

msg2.what=download_finish;

mmainhanlder.sendmessage(msg2);

//傳送到主線程

} };

};looper.loop();

//輪詢messagequeue,取到訊息後交給mwokrthreadhanler的handlemessage()方法進行處理(上面的方法),

}; }.start();

}private

void

setlistener()

});}

private

void

initmainhandler() }};

}private

void

initview()

}

頁面:

<

linearlayout

xmlns:android

=""android:layout_width

="match_parent"

android:layout_height

="match_parent"

android:orientation

="vertical"

>

<

button

android:id

="@+id/btnstartdownload"

android:layout_width

="match_parent"

android:layout_height

="wrap_content"

android:text

/>

<

progressbar

android:id

="@+id/pb"

android:layout_width

="match_parent"

android:layout_height

="wrap_content"

style

="@android:style/widget.progressbar.horizontal"

android:max

="100"

/>

<

textview

android:id

="@+id/tvprogress"

android:layout_width

="wrap_content"

android:layout_height

="wrap_content"

android:textsize

="20sp"

android:text

="0%"

/>

linearlayout

>

android執行緒間通訊

原文 1,通過handler機制.private void one new thread catch interruptedexception e message message new message message.what 123 message.obj 通過handler機制 handler...

Android通訊 Android執行緒間通訊

android程式中,執行緒分為主線程 ui thread 和工作執行緒 work thread 我們要遵循單執行緒模型原則 安卓ui的操作執行緒不安全,安卓ui的操作必須在主線程進行。1 多執行緒任務開發可以通過以下幾個方式實現 handler asynctask。詳見 2 如果子執行緒的資料想通...

android 執行緒間的通訊

在android,執行緒分為有訊息迴圈的執行緒和沒有訊息迴圈的執行緒,有訊息迴圈的執行緒一般都會有乙個looper,這個是android 的新概念。我們的主線程 ui執行緒 就是乙個訊息迴圈的執行緒。針對這種訊息迴圈的機制,我們引入乙個新的機制handler,我們有訊息迴圈,就要往訊息迴圈裡面傳送相...