Android中UI线程与子线程的通信
2017-05-17 21:32
330 查看
在UI线程中定义并使用handler消息机制可以有效的帮助与其他线程的通信
private Handler mHandler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case SUCCESS_NUMBER:{ //通过getData函数得到通过消息机制获取到的数据 Bundle bundle=msg.getData(); versionName=bundle.getString("versionName"); versionCode=bundle.getString("versionCode"); versionDes=bundle.getString("versionDes"); updatePath=bundle.getString("updatePath"); //建议得到的数据仅限于handleMessage这个函数中使用,因为线程执行顺序无法预测 checkVersion(); }break; } } };
new Thread(){ @Override public void run() { String path="http://10.25.13.155/update/updateInfo.json"; try { URL url=new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); if(connection.getResponseCode()==200){ InputStream is=connection.getInputStream(); String info= StreamUtil.getInfo(is); if(info!=null){ Message message= Message.obtain(); //Bundle 相当于Map,用来存储键值对 Bundle bundle=new Bundle(); JSONObject jsonObject=new JSONObject(info); versionName = jsonObject.getString("versionName"); versionCode = jsonObject.getString("versionCode"); versionDes = jsonObject.getString("versionDes"); updatePath = jsonObject.getString("updatePath"); bundle.putString("versionName",versionName); bundle.putString("versionCode",versionCode); bundle.putString("versionDes",versionDes); bundle.putString("updatePath",updatePath); message.setData(bundle); message.what=SUCCESS_NUMBER; //延时跳转 long endTime=SystemClock.currentThreadTimeMillis(); if((endTime-startTime)<5000){ SystemClock.sleep(5000-(endTime-startTime)); } //将信息通过消息机制传送到UI线程 mHandler.sendMessage(message); }else{ Log.i("联网失败","未获得信息"); } }else{ Log.i("联网信息","未取得链接"); } } catch (Exception e) { e.printStackTrace(); } } }.start();
private void checkVersion(){ if(mLocalVersionCode<Integer.parseInt(versionCode)){ Log.i("比较成功是否更新","是"+versionCode); }else { Intent intent=new Intent(this,IndexActivity.class); startActivity(intent); finish(); } }
相关文章推荐
- Android子线程与主UI线程通信方式
- android线程间通信和主线程更新ui
- Android UI线程与工作线程之间通信
- Android:带你玩转Servie,子线程,与UI线程通信[导入导出]
- Android通信模块(单线程,多线程通信方式,Handler 与UI Thread的交互,Handler接合子线程的使用)
- Android 多线程之间的通信交互(Ui线程与子线程之间的通信)Handler,Handler.post(Runnable runnable),runUiThread方式
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android 怎么启动一个工作线程及线程如何与UI线程交互
- Android 线程间通信原理
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- 关于进程、线程和Android的单线程模型UI
- Android并发编程线程间通信的三种基本方式
- Android中线程间通信
- android 线程间的通信
- Android的四个基本概念(线程通信和GLSurfaceView)
- Android实战技巧:Handler与线程间通信ITC
- Android开发: 线程间消息通信 Looper 和Handler
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23 21:08 1357人阅读 评论(0) 收藏 举报 目录(?)[+] 可能在非UI线程中刷新界面的时候,U
- AndroidUI——后台线程更新UI的几种方式
- Android在其他线程中更新UI