詳解android進(jìn)行異步更新UI的四種方式
大家都知道由于性能要求,Android要求只能在UI線程中更新UI,要想在其他線程中更新UI,我大致總結(jié)了4種方式,歡迎補(bǔ)充糾正:
- 使用Handler消息傳遞機(jī)制;
- 使用AsyncTask異步任務(wù);
- 使用runOnUiThread(action)方法;
- 使用Handler的post(Runnabel r)方法;
下面分別使用四種方式來更新一個(gè)TextView。
1.使用Handler消息傳遞機(jī)制
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
Handler handler = new Handler()
{
public void handleMessage(android.os.Message msg) {
if(msg.what==0x123)
{
tv.setText("更新后的TextView");
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new MyThread().start();
}
class MyThread extends Thread
{
@Override
public void run() {
//延遲兩秒更新
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0x123);
}
}
}
2. 使用AsyncTask異步任務(wù)
注:更新UI的操作只能在onPostExecute(String result)方法中。
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new Yibu().execute();
}
class Yibu extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
tv.setText("更新后的TextView");
}
}
}
3. 使用runOnUiThread(action)方法
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new MyThread().start();
}
class MyThread extends Thread
{
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
//延遲兩秒更新
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText("更新后的TextView");
}
});
}
}
}
4. 使用Handler的post(Runnabel r)方法
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run() {
try {
//延遲兩秒更新
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText("更新后的TextView");
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 實(shí)現(xiàn)銀聯(lián)刷卡機(jī)消費(fèi)后手動(dòng)簽名的功能(示例代碼)
在一些商場(chǎng)購(gòu)物時(shí),不需要用筆在銀聯(lián)機(jī)上簽名了,直接用手指觸摸實(shí)現(xiàn)消費(fèi)簽名,非常方便,下面小編給大家分享Android 實(shí)現(xiàn)銀聯(lián)刷卡機(jī)消費(fèi)后手動(dòng)簽名的功能,需要的朋友參考下吧2017-12-12
Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實(shí)現(xiàn)對(duì)輸入字?jǐn)?shù)的限制(推薦)
這篇文章主要介紹了Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實(shí)現(xiàn)對(duì)輸入字?jǐn)?shù)的限制(推薦)的相關(guān)資料,需要的朋友可以參考下2016-11-11
學(xué)習(xí)Android開發(fā)之RecyclerView使用初探
Android開發(fā)學(xué)習(xí)之路的第一課RecyclerView使用初探,感興趣的小伙伴們可以參考一下2016-07-07
Android?NDK開發(fā)之FFmpeg視頻添加水印
這篇文章主要介紹了在Android?NDK開發(fā)中如何通過FFmpeg為視頻添加水印,文中的示例代碼講解詳細(xì),對(duì)我們了解Android開發(fā)有一定的幫助,感興趣的可以學(xué)習(xí)一下2021-12-12
Android之使用Android-query框架開發(fā)實(shí)戰(zhàn)(二)
這篇文章主要介紹了Android之使用Android-query框架開發(fā)實(shí)戰(zhàn)(二)的相關(guān)資料,需要的朋友可以參考下2015-10-10
android ocr——身份證識(shí)別的功能實(shí)現(xiàn)
本篇文章主要介紹了android ocr——身份證識(shí)別的功能實(shí)現(xiàn),具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11
最近較流行的效果 Android自定義View實(shí)現(xiàn)傾斜列表/圖片
最近較流行的效果,這篇文章主要介紹了Android自定義View實(shí)現(xiàn)傾斜列表/圖片的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06

