編輯:關於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社交軟件的制作中非常具有實用價值。分享給大家供大家參考。具體如下:很
寫在最前(這是對上一篇博文的問題做的更新【android利用zbar二維碼掃描】) 前天早上登陸CSDN時候一條消息:一網友提出了兩點疑惑 &
檢查更新並下載更新可以說是一個app必備的功能了.既然是必備功能,往往需要考慮很多東西,如下:1,更新方式:一個軟件有更新了,如果是上線了新的功能或修復了某些bug,或者
謹記(指定選擇器Intent.createChooser())開始今天的內容前,先閒聊一下:(1)突然有一天頭腦風暴,對很多問題有了新的看法和見解,迫不及待的想要分享給大