
在日常开发中,都避免不了进行网络请求,并更新View,由于Android中主线程不可以进行耗时 *** 作,所以我们的网络请求只能放在子线程中,又由于在子线程中不能更新UI,所以我们就需要使用Handler切换到主线程并更新UI。
在介绍Handler使用之前,我们先了解以下两个问题。
1、为什么主线程不能进行耗时 *** 作?
因为如果在主线程进行耗时 *** 作,容易出现ANR,Application Not Responding,即应用无响应,当在一定的时间内,app无法响应时就会出现ANR,并d出一个 对话框提示应用无响应,所以我们应该避免在主线程中进行耗时 *** 作,当我们应用出现ANR时,会在
/data/anr/目录中生成tracestxt,我们可以通过这个文件查找错误信息。
2、为什么子线程中不能更新UI?
这是因为在子线程中更新UI不是线程安全的,在Android源码ViewRootImpl的checkThread方法中也对UI做了验证。
基于这两个问题,我们可以使用Handler来解决,接下来介绍Handler的基本使用。
首先创建Handler
接下来发送消息。
这个时候在handlerMessage方法中即可收到消息,获取Message中的数据,并更新UI了。是不是很简单。
您可以在此格式中设置数据
设置数据时
Message msg = new Message();
msgobj = data which you want to set // for object data
Msgarg1 = data which you want to set // for integer data
获取数据时
String data = (String) msgobj; // If object is of String
int integerData = msgarg1;
msgarg1 将您还可以在 msgarg2 他们都是整数类型的传递数据一次只有一个数据传递
以上就是关于如何获取handlemessage里面的数据全部的内容,包括:如何获取handlemessage里面的数据、如何从abstracthandlermapping对象中获取handlermethod对象、Android Handler使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)