博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应用开发-网络编程①
阅读量:5156 次
发布时间:2019-06-13

本文共 1459 字,大约阅读时间需要 4 分钟。

【 Android应用开发-网络编程①】

1、ANR(Application Not Response)应用程序无响应
①当用户输入事件5s内没有得到响应,将会弹出ANR对话框;
②广播接收者的onReceive()方法执行时间超过10s会出现ANR;
③解决原则:所有耗时操作都要在子线程中进行,包括网络操作、I/O、SDCard、数据运算;
2、常见错误及解决:
①ANR:application not response 应用无响应; androoid中耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中做。
09-02 01:52:40.711:E/ActivityManager(857): ANR in com.zdc.sourcelook(com.zdc.sourcelook/.MainActivity)
②4.0后网络操作强制在子线程中进行。因为网络访问是耗时的操作,可能会导致ANR
09-02 01:57:32.879: W/System.err(1789):  android.os.NetworkOnMainThreadException
③错误线程调用异常,子线程不能够更新UI(控件的内容)
09-02 02:02:08.873: W/System.err(1858): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
④主线程不能够做耗时的操作,网络请求就是耗时的操作需要放到子线程做。子线程不能更新控件的内容(更新Ui)。所以产生了矛盾,解决办法就是使用Handler.
3、Handler的使用步骤:
①主线程中创建一个Handler
 private Handler handler = new Handler(){


       public void handleMessage(android.os.Message msg) {

       };
};
②重写handler的handlermessage方法
③子线程中创建一个Message对象,将获取的数据绑定给msg
     通过指定URL获取有效数据,并解析获取的流数据
     InputStream inputStream = connection.getInputStream();
     // 将一个读取流转换成一个图片(Drawable、Btimap):
     Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
     Message msg = new Message();
     //另一种方式:Message msg = Messge.obtain;
     msg.obj = result;
④主线程中的handler对象在子线程中将message发送给主线程
      handler.sendMessage(msg);
⑤主线程中handlermessage方法接受子线程发来的数据,就可以做更新UI的操作。
4、注意:子线程一定不能更新UI?
①SurfaceView :多媒体视频播放,可以在子线程中更新UI;
②Progress(进度)相关的控件:也是可以在子线程中更新Ui;

转载于:https://www.cnblogs.com/cangsir/p/5763022.html

你可能感兴趣的文章
Unity多媒体展示项目经验分享-ImageEffect+动态绑定
查看>>
Java50道经典习题-程序28 排序算法
查看>>
Java基础---String类和基本数据类型包装类
查看>>
[NYOJ 37] 回文字符串
查看>>
C#-表达式树
查看>>
2.想起来的一点基础知识
查看>>
曾经踩过的坑--浏览器兼容-history
查看>>
centos7 Apache 2.4.6 多域名多网站配置
查看>>
MySQL性能优化
查看>>
建造者模式(Builder Pattern)
查看>>
程序开发的艺术
查看>>
对 Unity 碰撞器的相关调研
查看>>
linux 快速清空文件内容
查看>>
centos7安装配置jdk
查看>>
新年新气象
查看>>
webpack入门
查看>>
查看容器的挂载目录
查看>>
分布式系统(Distributed System)资料
查看>>
Android中LocalSocket使用
查看>>
【C++】各种成员变量
查看>>