Android工作線程轉換為UI線程三種方式
我們將工作線程轉換為UI線程,主要是進行UI的更新操作;
使用三種方法
- Activity的runOnUiThread(Runnable);
- View 的post(Runnable);
- View 的postDelayed(Runnable);
三個方法傳的是Runnable接口對象
new Runnable() {
@Override
public void run() {
} }
案例:不斷設置TextView的值
以下為三種方式的部分代碼,省略布局xml,以及控件的綁定等操作
runOnUiThread(Runnable)
//Button的點擊事件
public void onClick(View view){
//開啟一個工作線程,進行值的改變
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
//每隔0.08秒更新設置一次值
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
//Activity的方法
runOnUiThread(new Runnable() {//加入UI線程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
});
}
}
}).start();
}
post(Runnable)
//Button的點擊事件
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
//View的方法
textView.post(new Runnable() {//加入UI線程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
});
}
}
}).start();
}
postDelayed(Runnable)
//Button的點擊事件
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
//0.8秒后開始更新UI
textView.postDelayed(new Runnable() {//加入UI線程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
},800);
}
}
}).start();
}
來自:http://www.jianshu.com/p/615d32cd9a9b
本文由用戶 miao0626 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!