开发者社区> 问答> 正文

关于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();让子线程先执行完,但是还是没有效果,哪位大神告知下怎么解决呢?/

展开
收起
爵霸 2016-06-20 10:08:30 2184 0
1 条回答
写回答
取消 提交回答
  • 你可以在你的主线程里写个循环,判断newVersion被赋值后,再继续执行

    2019-07-17 19:43:41
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Android组件化实现 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载