Android多執行緒機制中的Handler使用介紹

來源:互聯網
上載者:User

接下來讓我介紹Android的Handler的使用方法。Handler可以發送Messsage和Runnable對象到與其相關聯的線程的訊息佇列。每個Handler對象與建立它的線程相關聯,並且每個Handler對象只能與一個線程相關聯。

Handler一般有兩種用途:1)執行計畫任務,你可以再預定的實現執行某些任務,可以類比定時器。2)線程間通訊。在Android的應用啟動時,會建立一個主線程,主線程會建立一個訊息佇列來處理各種訊息。當你建立子線程時,你可以再你的子線程中拿到父線程中建立的Handler對象,就可以通過該對象向父線程的訊息佇列發送訊息了

MainActivity.java
[java] 複製代碼 代碼如下:package com.example.thread;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
// 訊息處理者
private Handler handler;
private static final int TURNTEXT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
System.out.println("主線程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);
// 處理者
handler = new Handler() {
// handlerMessage方法處理handler發送的訊息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作擷取發送什麼訊息,根據訊息的標識,進行不同處理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};
try {
//主線程 阻塞 6s 大於
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//run方法執行完畢 線程就死掉
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("子線程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 發送訊息 what標識
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
package com.example.thread;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
// 訊息處理者
private Handler handler;
private static final int TURNTEXT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
System.out.println("主線程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);
// 處理者
handler = new Handler() {
// handlerMessage方法處理handler發送的訊息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作擷取發送什麼訊息,根據訊息的標識,進行不同處理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};
try {
//主線程 阻塞 6s 大於
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//run方法執行完畢 線程就死掉
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("子線程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 發送訊息 what標識
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.