UI界面的更新
来源:互联网 发布:联想扬天x110知乎 编辑:程序博客网 时间:2024/05/17 17:18
1、Activity的 runOnUiThread
1
2
3
4
5
6
7
8
9
10
11
12
13
textView = (TextView) findViewById( R.id.tv );
new
Thread(
new
Runnable() {
@Override
public
void
run() {
runOnUiThread(
new
Runnable() {
@Override
public
void
run() {
textView.setText(
"更新UI了"
);
}
});
}
}).start();
android Activity runOnUiThread() 方法使用
2、Handler sendEmptyMessage()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package
lib.com.myapplication;
import
android.os.Handler;
import
android.os.Message;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.widget.TextView;
public
class
MainActivity
extends
AppCompatActivity {
private
TextView textView ;
Handler handler =
new
Handler( ) {
@Override
public
void
handleMessage(Message msg) {
super
.handleMessage(msg);
textView.setText(
"Ui更新了"
);
}
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById( R.id.tv );
new
Thread(
new
Runnable() {
@Override
public
void
run() {
try
{
Thread.sleep(
2000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(
2
) ;
}
}).start();
}
}
3、Handler post()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package
lib.com.myapplication;
import
android.os.Bundle;
import
android.os.Handler;
import
android.support.v7.app.AppCompatActivity;
import
android.widget.TextView;
public
class
MainActivity
extends
AppCompatActivity {
private
TextView textView ;
Handler handler =
new
Handler();
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById( R.id.tv );
new
Thread(
new
Runnable() {
@Override
public
void
run() {
try
{
Thread.sleep(
2000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
handler.post(
new
Runnable() {
@Override
public
void
run() {
textView.setText(
"Ui更新了"
);
}
}) ;
}
}).start();
}
}
在子线程中切换到主线程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
new
Thread(
new
Runnable() {
@Override
public
void
run() {
LogUtil.d(
"ttt 11111111111"
+ Thread.currentThread().getName() );
new
Handler(Looper.getMainLooper()).post(
new
Runnable() {
@Override
public
void
run() {
LogUtil.d(
"ttt 55555555"
+ Thread.currentThread().getName() );
}
});
LogUtil.d(
"ttt 22222222222"
+ Thread.currentThread().getName() );
LogUtil.d(
"ttt 33333333333"
+ Thread.currentThread().getName() );
LogUtil.d(
"ttt 44444444444"
+ Thread.currentThread().getName() );
}
}).start();
结果
1
2
3
4
5
ttt 11111111111Thread-155
ttt 22222222222Thread-155
ttt 33333333333Thread-155
ttt 44444444444Thread-155
ttt 55555555main
可见这种方式可以快速切换线程,从log日志来看,切换到主线程不会阻塞子线程。
4、view Post()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
textView = (TextView) findViewById( R.id.tv );
new
Thread(
new
Runnable() {
@Override
public
void
run() {
try
{
Thread.sleep(
2000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
textView.post(
new
Runnable() {
@Override
public
void
run() {
textView.setText(
"Ui更新了"
);
}
}) ;
}
}).start();
总结:
1、其实上面的四种方式都可归结于一种方式:handler 用于Android线程之间的通信。
2、为什么android要求只能在UI线程进行UI操作? 主要还是为了避免多线程造成的并发的问题。在单线程操作UI是安全的。
0 0
- UI界面的更新
- android异步更新UI界面的方法
- android关于UI界面更新的问题
- android handler实现界面UI的更新
- Android 中几种更新UI界面的方法
- 非UI线程更新UI界面的各种方法小结
- 非UI线程更新UI界面的各种方法小结
- Android更新UI界面的几种方法的使用
- android异步更新UI界面
- android线程更新UI界面
- qt 线程更新UI界面
- anroid动态更新UI界面
- 子线程、ui界面更新
- service动态更新UI界面
- Android Adapter,UI界面更新
- 在WPF的用户线程中更新UI界面
- 在WPF的用户线程中更新UI界面
- 在wpf的用户线程中更新ui界面
- myeclipse下关于项目名称包名重命名后的错误修改
- 17:开餐馆
- Gym 101308(ACM ICPC 2009–2010, Northeastern European Regional Contest)
- opencv(3)---图片/视频处理应用
- 根据用户输入数字n打印nn乘法表
- UI界面的更新
- WAV格式分析
- LeNet的C语言实现
- MySQL入门2章
- 遗传算法GA
- js实现二分查找
- 一个屌丝程序猿的人生(六十三)
- java代码通过ssh免密操作远程服务器shell
- 设计模式--MVVM