如何在android一条单独线程,更新ui ?

如何在android一条单独线程,更新ui?... 如何在android一条单独线程,更新ui ? 展开
 我来答
网络营销专家10
推荐于2016-11-09 · TA获得超过669个赞
知道答主
回答量:99
采纳率:0%
帮助的人:136万
展开全部
方法有两种:
通过继承Thread类,重写Run方法来实现
通过继承接口Runnable实现多线程
主要接受子线程发送的数据, 并用此数据配合主线程更新UI.

Handler的主要作用:主要用于异步消息的处理

Handler的运行过程:
当(子线程)发出一个消息之后,首先进入一个(主线程的)消息队列,发送消息的函数即刻返回,而在主线程中的Handler逐个的在消息队列中将消息取出,然后对消息进行处理。这样就实现了跨线程的UI更新(实际上还是在主线程中完成的)。
这种机制通常用来处理相对耗时比较长的操作,如访问网络比较耗时的操作,读取文大文件,比较耗时的操作处理等。

在大白话一点的介绍它的运行过程:
启动应用时Android开启一个主线程
(也就是UI线程) , 如果此时需要一个耗时的操作,例如:
联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象(这也就是你在主线程中直接访问网络时会提示你异常的原因,如我们上篇文章所述Android主线程不能访问网络异常解决办法)。
wqw0000oooo
2012-07-16 · TA获得超过246个赞
知道小有建树答主
回答量:200
采纳率:100%
帮助的人:164万
展开全部
用AsyncTask异步类吧,我给你贴个DEMO

class AsyncLoader extends AsyncTask<Integer, Integer, Integer> {
int index;
public AsyncLoader(int index) {
//下面是显示用正在加载中的DIALOG联网布局引用的代码
// this.index = index;
//dialog = new AlertDialog.Builder(activity).show();
// dialog.setContentView(infoUtil.getDialogProgressView());
}
@Override
//这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步//返回,将传回到上一步。在执行过程中可以调用publishProgress(Progress...)来更新任务的进//度。在执行完onPreExecute() 方法后执行
protected Integer doInBackground(Integer... params) {
//这个事获取服务器数据的方法
getData(index);
return 1;
}
@Override
//异步类的静态方法在UI线程上调用任务后立即执行。这步通常被用于设置任务,例如在用户界//面显示一个进度条。
protected void onPreExecute() {

super.onPreExecute();
}
@Override
//当后台计算结束时,调用 UI线程。后台计算结果作为一个参数传递到这步,也就是//doInBackground(Integer... params)的结果
protected void onPostExecute(Integer result) {

super.onPostExecute(result);
if (dialog != null && dialog.isShowing())
//这个是那个正在加载中的DIALOG对话框,消失以后开始执行更新UI
dialog.dismiss();
//这个事里面要更新的UI的操作
updateUI(index);
}
@Override
//后台调用UI线程,执行时间不确定
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
314659476
2015-11-22 · TA获得超过1836个赞
知道大有可为答主
回答量:2162
采纳率:66%
帮助的人:563万
展开全部
Android不允许在其他子线程更新主线程的UI,只能在主线程中进行UI操作。除了SurfaceView特殊,可以在线程中更新,否则其他UI操作只能在主线程中进行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adekof14
2015-11-14 · TA获得超过3729个赞
知道小有建树答主
回答量:3017
采纳率:96%
帮助的人:372万
展开全部
android中非UI线程是不能对UI进行操作的,你可以在单独线程执行耗时操作,然后通过Handler去更新UI。或者你可以使用AsyncTask。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
j00710
推荐于2016-03-13 · TA获得超过375个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:296万
展开全部
android中非UI线程是不能对UI进行操作的,你可以在单独线程执行耗时操作,然后通过Handler去更新UI。或者你可以使用AsyncTask。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式