您好,登錄后才能下訂單哦!
1.創(chuàng)建線程
(1)通過Thread創(chuàng)建線程
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}
});
(2)通過實(shí)現(xiàn)Runnable()接口創(chuàng)建線程
public class MainActivity extends Activity implements Runnable{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
@Override
public void run() {
// TODO Auto-generated method stub
}
}
2.線程的開啟
thread.start();
3.線程的休眠
Thread.sleep(1000);//休眠1秒
4.中斷線程
public class MainActivity extends Activity implements Runnable{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LooperThread thread = new LooperThread();
thread.start();
thread.interrupt();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(!Thread.currentThread().isInterrupted()){
// do something
}
}
}
前面介紹了現(xiàn)成的用法,不過不能在新建的子線程中對(duì)UI進(jìn)行修改。如果要操作,會(huì)報(bào)錯(cuò)Only the original thread that created a view hierarchy can touch its views。為此,Android引入Handler消息傳遞機(jī)制,來實(shí)現(xiàn)在線程中操作UI界面。
1.循環(huán)者(Looper)簡(jiǎn)介
在Android中,一個(gè)線程對(duì)應(yīng)一個(gè)Looper對(duì)象,一個(gè)Looper對(duì)象對(duì)應(yīng)一個(gè)MessageQueue(消息隊(duì)列)。MessageQueue用于存放message。在MessageQueue中,存放的消息按照FIFO原則執(zhí)行。
Looper對(duì)象用來為線程開啟一個(gè)消息循環(huán),從而操作MessageQueue。默認(rèn)情況下,系統(tǒng)自動(dòng)為主線程創(chuàng)建Looper對(duì)象,開啟消息循環(huán)。所以,在主線程中用下面的代碼創(chuàng)建Handler對(duì)象不會(huì)出錯(cuò),而在非主線程中則會(huì)報(bào)錯(cuò)。
Handler handler = new Handler();
如果想在非主線程中創(chuàng)建Handler對(duì)象,必須用到Looper:
public class LooperThread extends Thread {
public Handler h;
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare(); //
h = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.i("Looper", String.valueOf(msg.what));
}
};
Message m = h.obtainMessage();
m.what = 0x11;
h.sendMessage(m);
Looper.loop();
}
}
2.消息處理類(Handler)簡(jiǎn)介
Handler主要有以下兩個(gè)作用:
(1)將Message或Runnable應(yīng)用post()或sendMessage()方法發(fā)送到MessageQueue中,發(fā)送時(shí)可以指定延遲時(shí)間或者綁定的Bundle數(shù)據(jù)。當(dāng)MessageQueue循環(huán)到該Message時(shí),調(diào)用handlerMessage()方法對(duì)其處理。
(2)在子線程與主線程進(jìn)行通信,也就是在工作線程中與UI進(jìn)行通信
3.消息類(Message)簡(jiǎn)介
Message具有如下5個(gè)屬性
1.arg1 int 用來存放整型數(shù)據(jù)
2.arg2 int 用來存放整型數(shù)據(jù)
3.obj Object用來存放發(fā)送給接收器的Object類型的任意對(duì)象
4.replyTo Messenger用來指定該Message該發(fā)往何處
5.what int 用戶自定義消息代碼
在使用時(shí),需要注意以下3點(diǎn):
1.通常使用Message.obtain()或Handler.obtainMessage()獲取空消息對(duì)象,以節(jié)省資源
2.如果一個(gè)Message只需要攜帶簡(jiǎn)單的int信息,優(yōu)先使用arg1和arg2來傳遞,這比Bundle節(jié)省內(nèi)存
3.盡可能用Message.what來標(biāo)識(shí)信息
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。