Android如何将数据从子线程中传到主线程

Android如何将数据从子线程中传到主线程,第1张

这个谷歌早已经给你实现了,使用handler:

例如在主线程创建handler

子线程发消息到这个handler

Handler handler=new Handler(){

@Override

public boolean handleMessage(Message msg){

switch (msg.what){

case 1:

//TODO

break

}

}

//子线程里

Message msg = new Message()

msg.what = 1

msg.object=XX//传对象,还有arg1、arg2……

handler.sendMessage(msg)

用管道可能你不太熟悉,也可以用一个折中办法:这两个线程如果出自一个母类体生成并.start的话,可以在母类体中设置一个全局的数组变量,把母类体当成传输中介,就可以了。一定能传到。希望能对你有帮助。

在Android中规定只有UI thread可以更新界面,但是我们开发中会经常遇到一些耗时的 *** 作,这些 *** 作可能会很花费时间,最终的结果却要更新到UI上

这种情况下,如果我们将这个 *** 作放到UI thread中做就很可等挡住UI线程,从而导致ANR Application Not Responding,因此我们都会new一个工作

线程,在这个线程中做复杂的耗时 *** 作,待得到结果后,再将结果更新到UI。

子线程获取数据,更新UI的方法大概有这样几种:

1、通过AsyncTask+progressbar的方法,在AsyncTask的doInBackground()中做耗时的 *** 作,在onProgressUpdate(Progress…) 中更新UI(进度条)

此方法在主线程执行,用于显示任务执行的进度。onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理 *** 作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回。

2、通过Handler的方法,从子线程中发消息Msg,在Handler中处理该消息(在UI thread中执行),并updateUI。

3、如果你的界面是listView的形式,不妨用listAdapter绑定数据库,在子线程接收到实时数据跟新到provider中,然后触发listView的自动更新。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9883204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存