gdsmileday 2015-05-16 15:55 采纳率: 100%
浏览 5395
已采纳

关于android 中 handleMessage问题

/*主进程中一函数,检查是否版本更新, newVersion变量为全局变量*/
private void goToCheckNewVersion() {

Handler ckhander=new Handler() {
public void handleMessage(android.os.Message msg) {

super.handleMessage(msg);
if (msg.what == 1) {

newVersion=msg.getData().getString("vers");/*这里没问题,可以获取到子线程传来的新版本号*/
System.out.println("NewVersion为:"+newVersion);
}
if (msg.what == 0) {
ToastUtil toastUtil = new ToastUtil(UpDate.this);

toastUtil.showDefultToast("抱歉,由于网络问题暂时无法检查是否需要更新!!").show();
newVersion="Error";
}
}
};
​ try {
Thread ckthread= new Thread(new CheckNewVTHread(ckhander));//子线程
ckthread.start();//线程启动
ckthread.join();//我想让handleMessage执行完成,成功给NewVersion赋值后再运行主线程,但是没起作用。
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
UpDate.newVersion="Error";
}

System.out.println("执行完NewVersion为:"+newVersion);
/*问题来了,这里的newVersion死活都没有被子线程改变,按理说应该在handleMessage函数中 msg.what==1时候就改变了。最后发现是 goToCheckNewVersion函数,既主线程执行太快,在子线程还没返回时候就执行完了,所以newVersion还没变,那么怎么避免这个问题呢?我用了ckthread.join();让子线程先执行完,但是还是没有效果,哪位大神告知下怎么解决呢?*/

  • 写回答

6条回答 默认 最新

  • 懒懒的享受阳光 2015-05-17 07:59
    关注

    你可以在你的主线程里写个循环,判断newVersion被赋值后,再继续执行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?