子线程、UI线程(写给自己看的,勿入)

个人需求:网络请求等操作需要放在子线程中执行 ,不能放在主线程。而子线程请求完毕需要更新UI信息。

1、定义Handler  接收子线程的消息,当收到消息时执行UI更新。

final Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
          //执行UI更新( 根据个人需求 )
break;
default:
break;
}
}

};

2、开启一个子线程,执行网络请求或者其他操作。(放主线程执行会阻塞,报错,故需放在子线程执行) 请求完毕拿到数据后,发送消息到Handle上,让它执行更新UI

  new Thread(){
@Override
public void run() {
super.run();
OkHttpClient okHttpClient = new OkHttpClient();

FormBody body = new FormBody.Builder()
.add("action", "timeline")//传递键值对(参数)
.build();
Request request = new Request.Builder() //URL 表单 绑定 然后执行execute
.url(url)
.post(body)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
json = response.body().string();
Log.i("路过", "执行" + json);
bean_jsondata = gson.fromJson(json, Bean.class);
Log.i("路过", bean_jsondata.getTime() + "---" + bean_jsondata.getType() + "---" + bean_jsondata.getText());

mHandler.sendEmptyMessage(0);

//需要数据传递,用下面方法;
Message msg =new Message();
// msg.obj = "UI更新";//可以是基本类型,可以是对象,可以是List、map等;消息传递
mHandler.sendMessage(msg);

} catch (IOException e1) {
e1.printStackTrace();
}

}
}.start();


转载于:https://www.cnblogs.com/luguo2017/p/7880522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值