新聞中心
Android更新UI界面的幾種方法的使用
1. 利用Android Handler機制和message消息傳遞
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、茄子河網(wǎng)站維護(hù)、網(wǎng)站推廣。
我們知道 , Android Handler機制主要用作線程之間的通信,為了易于理解,我們暫不考慮每個線程的Looper問題。UI更新一般是在主線程中完成的,而Handler就是定義在主線程中,然后通過在Handler構(gòu)造方法中重寫HandlerMessage()方法,來處理有其他線程(子線程)傳遞過來的消息,從而達(dá)到更新UI的目的。相應(yīng)的,在其他線程(子線程)中,我們通過SendMessage(message)方法來傳遞消息。
2.利用Android Handler機制和post
這個比較容易理解,也是UI更新常用的方法。 在一個新建的線程中進(jìn)行更新界面的操作,然后在主線程中利用mHandler.post(Runnable runnable)來達(dá)到更新界面的目的,其中mHandler是在主線程中定義的。
3、通過runOnUiThread()方法來實現(xiàn)
class?MyThread?extends?Thread{
@Override
public?void?run()?{
//?TODO?Auto-generated?method?stub
super.run();
//數(shù)據(jù)處理
//...
runOnUiThread(new?new?Runnable()?{
public?void?run()?{
//刷新界面
list.add(dog);
adapter.notifyDataSetChanged();
}
}
})
}
Android更新Ui的幾種方法和見解
利用Looper更新UI界面
2.AsyncTask利用線程任務(wù)異步更新UI界面
3.利用Runnable更新UI界面
android中如何實現(xiàn)UI的實時更新
1、在主線程中啟動一個子線程
首先,我們需要在主線程中啟動一個子線程,這個比較簡單,直接在MainActivity的onCreate()方法中調(diào)用如下方法即可:
new?Thread(mRunnable).start();
2、在子線程中發(fā)送Message給Handler
在創(chuàng)建子線程時,我們使用了Runnable接口對象mRunnable。這里,只需要實現(xiàn)Runnable接口,并重寫該接口的run()方法,在run()方法中實現(xiàn)每1秒發(fā)送一條Message給Handler即可。具體實現(xiàn)方法如下:
/*
*?Function???:???實現(xiàn)run()方法,每1秒發(fā)送一條Message給Handler
*/
private?Runnable?mRunnable?=?new?Runnable()?{
public?void?run()?{
while(true)?{
try?{
Thread.sleep(1000);
mHandler.sendMessage(mHandler.obtainMessage());
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
};
3、Handler接收Message通知
最后,我們創(chuàng)建一個Handler對象,用來接收Message通知。在收到Message通知后,完成刷新UI的操作即可。具體實現(xiàn)方法如下:
/*
*?Function???:???實現(xiàn)handleMessage()方法,用于接收Message,刷新UI
*/
private?Handler?mHandler?=?new?Handler()?{
public?void?handleMessage(Message?msg)?{
super.handleMessage(msg);
refreshUI();
}
};
4、刷新UI
由以上的代碼可以看出,刷新UI的操作,我們是放在refreshUI()方法中來完成的。refreshUI()方法的實現(xiàn)也很簡單,調(diào)用HttpUtils工具類中的getInputStream()方法,獲得圖1所示W(wǎng)eb工程的頁面內(nèi)容輸入流,再將該輸入流轉(zhuǎn)化為字符串,放入TextView控件中進(jìn)行顯示即可。具體實現(xiàn)方法如下:
/*
*?Function???:???刷新UI
*/
private?void?refreshUI()?{
try?{
InputStream?inputStream?=?HttpUtils.getInputStream();
String?resultData?=?HttpUtils.getResultData(inputStream);
mTextView.setText(resultData);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
android怎么更新UI
首先,android的UI刷新是在主線程(UI線程)中完成的。四大組件中,activity和service運行在主線程中。現(xiàn)在總結(jié)自己在項目中常用到的UI刷新方式。
第一,利用子線程發(fā)消息刷新UI。
子線程負(fù)責(zé)處理UI需要的數(shù)據(jù),然后發(fā)消息到主線程來刷新UI。代碼結(jié)構(gòu)如下:
new Thread(new Runnable() {
@Override
public void run() {
Person person=new Person();
person.setName(mName.getText().toString().trim());
person.setPhone(mPhone.getText().toString().trim());
Log.i("person",person.toString());
DatabaseInfoFactory.getPersonDao(mContext).addPerson(person);
Looper.prepare();
Message msg=Message.obtain();
msg.what=0x123456;
handler.sendMessage(msg);
Looper.loop();
}
}).start();
主線程中:
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what==0x123456||msg.what==0x123){
fillData();
setListener();
}
}
};
第二,利用異步任務(wù)更新UI。代碼結(jié)構(gòu)如下:
new AsyncTaskvoid,void,void() {
@Override
protected void onPostExecute(Void result) {
if(mAdapter==null){
mAdapter=new LeaveInfoAdapter();
//設(shè)置數(shù)據(jù)適配器
mLVleaveInfos.setAdapter(mAdapter);
Log.i("測試", "異步任務(wù)顯示后臺獲得數(shù)據(jù)庫數(shù)據(jù)");
}
else {
mAdapter.notifyDataSetChanged();
}
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... params) {
//獲得要顯示的數(shù)據(jù)
mleaveInfos=mLeaveInfosDao.findAll();
if (mleaveInfos==null) {
Toast.makeText(HomeActivity.this,"請假數(shù)據(jù)不存在或是已經(jīng)清除!", 500).show();
}
Log.i("測試", "異步任務(wù)后臺獲得數(shù)據(jù)庫數(shù)據(jù)"+mleaveInfos.size());
return null;
}
}.execute();/void,void,void
第三,利用配置文件+activity的生命周期方法刷新UI。
分享題目:android更新ui,Android更新UI
URL分享:http://fisionsoft.com.cn/article/dsdjpoo.html