編輯:關於Android編程
前言
在android開發中,界面UI的更新都是在主線程來完成的。線程分為主線程(Main Thread,簡稱MT)和工作線程(Work Thread,簡稱WT),我們通常會在WT中執行一些比較耗時的操作,比如下載,網絡,緩存等,然後在將結果發送給MT進行UI的更新操作。如果是在WT進行UI的更新,則會拋出異常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有創建這個View的原始線程才能修改這個view)。
在BT搜索、WIFI搜索、其他需要更新View的UI過程中,很多是采用廣播的方式通知搜索的結果,實時的顯示到listview中進行UI的更新操作。通常會使用以下幾種方式進行UI的更新:handler,runOnUiThread,子線程發送Message。
一、Activity.runOnUiThread
利用Activity.runOnUiThread(Runnable)把更新ui的代碼創建在Runnable中,然後在需要更新 ui時,把這個Runnable對象傳給Activity.runOnUiThread(Runnable)。這樣Runnable對像就能在ui程序中被調用。如果當前線程是UI線程,那麼行動是立即執行。如果當前線程不是UI線程,操作是發布到事件隊列的UI線程。
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.e(TAG, "開始添加設備!");
addDevice(device);
}
});
二、handler.post(Runnable)
handler.post(new Runnable() {
@Override
public void run() {
addDevice(device);
}
});
三、子線程發送Message
首先在需要執行更新的位置添加以下代碼
new Thread(new Runnable() {
@Override
public void run() {
//Message msg = new Message();
//msg.what = 0x06;
//handler.sendMessage(msg);
handler.sendEmptyMessage(0x06);
}
}).start();
然後進入handler下進行處理
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x06:
addDevice(device);
break;
default:
break;
}
super.handleMessage(msg);
}
};
以上三種方法都可以實現UI的更新,掌握哪種方式取決於代碼中的疊加度,不過個人推薦使用方法一。希望對大家的學習有所幫助,也希望大家多多支持本站。
Android觸摸事件分發機制
Android中的事件分為按鍵事件和觸摸事件,這裡對觸摸事件進行闡述。Touch事件是由一個ACTION_DOWN,n個ACTION_MOVE,一個ACTION_UP組成
android編程實現局部界面動態切換的方法
本文實例講述了android編程實現局部界面動態切換的方法。分享給大家供大家參考,具體如下:局部界面固定,局部界面可以動態切換。效果如下:這個效果由3個layout構成m
Android編寫簡單的聊天室應用
最近寫了一個簡單的聊天室應用,可以發送表情,更改頭像這些功能。主要技術點就是怎樣把表情圖片放到textview等Ui控件中展示。這裡廢話不多說,下面是效果圖:
自定義字母索引View
在聯系人,好友等列表中,為了能夠快速的根據名稱查找到相應的聯系人或者好友,通常會建立一個可以根據字母快速定位名稱的View。如下圖中右邊字母表所示:1.自定義View關於