Android——子线程中访问网络数据问题
2015-11-30 20:38
302 查看
之前简单掌握了service和activity 主线程相互进行通信:
1.Actvity发送消息到Service 通过IBinder接口,
在Service中自定义一个MyBinder内部类,这个类继承自Binder,类里面实现一些对当前Service类对象数据的操作(学过Java都知道,非静态内部类是可以直接访问外部内数据的)
在Service的onBind()方法里面返回上面MyBind类的对象
然后在主线程activity中,绑定服务时要传递一个参数ServiceConnection,这个接口对象里面有两个重写方法
在onServiceConnected方法中我们就可以得到MyBing对象,通过调用该对象里面定义的方法,向Service传递数据
2.Service发送消息到Actvity
一般还是通过上面的MyBinder,在里面定义一个方法传递一个主线程里面创建的Handler,在Service里面通过调用handler.sendMessage()方法向主线程发送消息。
3.Service中开启子线程调用网络通信的问题
在初次遇到这个问题的时候,总是提示Looper异常,查了一些博客都是讲使用Looper从主线程发送消息给子线程,而要做的是子线程中进行网络通信。
最后解决的方法是:
传递activityg到service中,在service开启的子线程中,将网络通信放在下面的这个方法中运行:
1.Actvity发送消息到Service 通过IBinder接口,
在Service中自定义一个MyBinder内部类,这个类继承自Binder,类里面实现一些对当前Service类对象数据的操作(学过Java都知道,非静态内部类是可以直接访问外部内数据的)
在Service的onBind()方法里面返回上面MyBind类的对象
然后在主线程activity中,绑定服务时要传递一个参数ServiceConnection,这个接口对象里面有两个重写方法
@Override public void onServiceConnected(ComponentName name, IBinder service) { //获得传递过来的MyBinder MyBinder binder = (MyBinder ) service; } @Override public void onServiceDisconnected(ComponentName name) { }
在onServiceConnected方法中我们就可以得到MyBing对象,通过调用该对象里面定义的方法,向Service传递数据
2.Service发送消息到Actvity
一般还是通过上面的MyBinder,在里面定义一个方法传递一个主线程里面创建的Handler,在Service里面通过调用handler.sendMessage()方法向主线程发送消息。
3.Service中开启子线程调用网络通信的问题
在初次遇到这个问题的时候,总是提示Looper异常,查了一些博客都是讲使用Looper从主线程发送消息给子线程,而要做的是子线程中进行网络通信。
最后解决的方法是:
传递activityg到service中,在service开启的子线程中,将网络通信放在下面的这个方法中运行:
activity.runOnUiThread(new Runnable() { @Override public void run() { //网络通信 } });
相关文章推荐
- 基于AFNetworking封装的网络请求工具类【转载】
- RTP-RTCP协议分析
- 基于AFNetworking的网络判断【转载】
- 安卓网络通信框架Volley学习(二)基于Volley高效加载网络图片
- https 双向认证开发实践
- TCP三次握手四次挥手
- iOS开发网络—数据安全
- Android: 网络请求Error,socket error可能原因之-1
- 基于AFNetworking封装的网络请求工具类
- 基于AFNetworking的网络判断
- 多人游戏用 TCP 还是UDP
- 网络层—网络层提供的两种服务
- 网络交换机Q&A
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 7.外部接口的设计
- 修改系统的TIME_WAIT等待时间和其它的TCP属性
- malloc 能申请多大的空间 http://www.zhihu.com/question/20836462
- 修饰函数和函数返回值的const的差别 http://blog.chinaunix.net/uid-12673432-id-2923858.html
- iOS 用CornerStone配置SVN,HTTP及svn简单使用说明
- python3 基于urllib模块的网络编程
- Ubuntu Server Guide ☞ 联网 ☞ 网络配置