編輯:關於Android編程
最近想把學習Android過程中的Handler使用經驗寫下來,供自己以後查看,也與大家一起分享。
使用Handler其實不得不與Android中的線程或者說Java中的多線程扯上關系。本篇文章只會用到最基本的線程使用,不會涉及太難的,關於Android的線程我們以後再討論。在Android中每新建一個Activity,該Activity(理解為界面)就是一個線程,是一個主線程,也稱之為UI線程。主線程可以更新界面元素,不會出現問題。每當新建一個線程new Thread,該線程就是一個子線程,Android規定子線程是不能直接更新UI界面的,否則會出問題。
下面將會使用Android提供的Handler機制在子線程中更新UI.分別使用3種方式,3種方式相互聯系又有區別。
(1)Handler.post()方式
該方法使用Handler中的post()方法更新UI,這裡會涉及Thread,Runnable兩個線程的概念,先暫且忽略吧。該方法比較簡單,容易理解。先貼上代碼:
public class MainActivity extends Activity {
private TextView text;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.id_text);
/**
* new Thread()在該線程中實現你具體的業務邏輯,比如網絡請求,耗時操作等等;
* new Thread()是一個子線程,是非UI線程,如果在該線程中需要更新界面,則需要使用Handler;
*
*/
new Thread() {
@Override
public void run() {//在run()方法實現業務邏輯;
//...
//更新UI操作;
handler.post(new Runnable() {
@Override
public void run() {
text.setText(使用Handler更新了界面);
}
});
}
}.start();
}
}

(2)Handler.post(),內部類實現Runnable接口方式
該方法與方法1非常像,只是新建了一個內部類,並且實現了Runnable接口,然後在post()方法中不用new一個匿名內部類了。相對來說邏輯上更加清楚。思路同方法1.貼上代碼如下:
public class MainActivity extends Activity {
private TextView text;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.id_text);
final MyRunnable myRunnable = new MyRunnable();//定義MyRunnable的對象;
new Thread() {
@Override
public void run() {
handler.post(myRunnable);//調用Handler.post方法;
}
}.start();
}
class MyRunnable implements Runnable {//內部類實現Runnable接口;
@Override
public void run() {//還是在Runnable重寫的run()方法中更新界面;
text.setText(使用Handler更新了界面);
}
}
}

(3)sendMessage(),handleMessage()方式
在Handler中有兩個非常重要的方法,sendMessage()和handleMessage()方法,sendMessage()方法用於在線程中向Handler發送一個消息,handleMessage()用於捕獲該消息,並且更新UI.代碼如下:
public class MainActivity extends Activity {
private TextView text;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
text.setText(使用Handler更新了界面);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.id_text);
new Thread() {
@Override
public void run() {
//...你的業務邏輯;
Message message = new Message();//發送一個消息,該消息用於在handleMessage中區分是誰發過來的消息;
message.what = 1;
handler.sendMessage(message);
}
}.start();
}
}
。
至此,已經基本實現了在子線程中使用Handler更新了UI界面。能滿足最基本的開發需要。當然Handler中還有很多細節以及注意事項,請聽下回分解。
Android中實現為TextView添加多個可點擊的文本
本文實例展示了Android中實現為TextView添加多個可點擊的文本的方法。該功能在Android社交軟件的制作中非常具有實用價值。分享給大家供大家參考。具體如下:很
android利用zbar二維碼掃描-(解決中文亂碼及掃描區域定義)
寫在最前(這是對上一篇博文的問題做的更新【android利用zbar二維碼掃描】) 前天早上登陸CSDN時候一條消息:一網友提出了兩點疑惑 &
Android檢查更新庫CheckUpdateLibrary使用教程
檢查更新並下載更新可以說是一個app必備的功能了.既然是必備功能,往往需要考慮很多東西,如下:1,更新方式:一個軟件有更新了,如果是上線了新的功能或修復了某些bug,或者
簡述Android中實現APP文本內容的分享發送與接收方法
謹記(指定選擇器Intent.createChooser())開始今天的內容前,先閒聊一下:(1)突然有一天頭腦風暴,對很多問題有了新的看法和見解,迫不及待的想要分享給大