1. 前言
和很多其他的GUI库一样,Android的UI线程也是不安全的,也就是说,要想更新应用程序中的U元素,必须在主线程中进行,否则就会报错。一个应用程序启动之后,系统会默认的创建一个"main"的主线程,这个线程是应用于界面工具包(android.widgeth和android.view)交互的地方。在很多时候,进行开发工作的时候,会进行一些耗时的操作,如网络连接、数据库查询等,如果这些工作全部在主线程中进行,就有可能造成拥堵,导致界面进程就被阻塞,影响客户体验。耗时的任务需要在子线程,然后根据任务的结果来更新相应的UI控件。对于这种情况,Android提供了一套异步消息处理机制,完美地解决了在子线程中进行UI操作的问题。
2. 方法总结
这是我个人使用过的方法,如果有什么缺漏或者补充,可以联系我指出
1) Activity.runOnUIThread(Runnable)
2) Handler
3) AsyncTask
3. Activity.runOnUIThread(Runnable)
这一种方法是最简单的,只需要在子线程中需要更新子线程的地方直接调用就好,这会直接将子线程切回到主线程,由于不是新线程,所以尽量不在里面进行过多的耗时操作。下面是一个简单的例子
new Thread(new Runnable() {
@Override
public void run() {
//耗时操作
runOnUiThread(new Runnable() {
@Override
public void run() {
//进行UI操作
}
});
}
}).start();