多activity使用同一socket
来源:互联网 发布:python 依赖注入 编辑:程序博客网 时间:2024/06/06 02:15
解决这个问题大抵有三种方法:
1、使用单例模式
2、将socket封装在service中
3、application实体类
前两种方法,Stackflow上有较多的实现方式,但个人认为短时间内较难上手,而且不方便及时处理接收到的信息
所以我们来讨论一下第三种方法
这种方法的实质,我认为就是把socket当做一个全局变量
1、首先,实现MySocket类
public class MySocket extends Application{ Socket socket = null; public Socket getSocket(){ return socket; } public void setSocket(Socket socket){ this.socket = socket; }}
setSocket()是在第一次在某个activity中socket初始化后,将其保存下来
getSocket(),其他的acticity中调用,便可获得之前建立过的socket,从而达到共享目的
2、设置AndroidManifest.xml
<application android:name=".MySocket" <!-设置application实体类-> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity">
3、首次初始化socket(这也算是比较优良的在Android中实现socket的例子)
Socket socket = null; BufferedReader reader = null; BufferedWriter writer = null; public void connect() { AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() { @Override protected Void doInBackground(Void... arg0) { try { socket = new Socket("120.77.244.212", 11332); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); ((MySocket)getApplication()).setSocket(socket); } catch (UnknownHostException e1) { //Toast.makeText(Client.this, "无法建立链接", Toast.LENGTH_SHORT).show(); } catch (IOException e1) { //Toast.makeText(Client.this, "无法建立链接", Toast.LENGTH_SHORT).show(); } try { String line; while ((line = reader.readLine()) != null) { publishProgress(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { if (values[0].contains("@success")) { Toast.makeText(secondActivity.this,"链接成功!", Toast.LENGTH_SHORT).show(); } super.onProgressUpdate(values); } }; read.execute(); } public void send(String order) { try { writer.write(order + "\n"); writer.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
我加粗的那行代码,((MySocket)getApplication()).setSocket(socket);首次初始化后socket,赋值给全局
4、在其他activity中再调用
socket = ((MySocket)getApplication()).getSocket(); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
大致上就是如此,可以较为便捷的实现我们的目的。此外再提醒一点,别忘了在AndroidManifest.xml中添加各种需要的权限
阅读全文
1 0
- 多activity使用同一socket
- 多个socket使用同一端口
- 多个socket使用同一端口
- 使用Socket同一网络内文件传输
- 使用socket实现同一台计算机进程间通信
- C#Socket编程多客户端基于同一服务端通信
- 同一Activity的Fragment切换
- 多接口使用同一套接词
- 同一线程内多Handler使用浅析
- vb socket通信 1服务器N客户端(服务器使用同一端口)(1)
- vb socket通信 1服务器N客户端(服务器使用同一端口)(2)
- 同一进程中同一端口如何区分不同的Socket
- 同一进程中同一端口如何区分不同的Socket
- Android用shareUserID实现多个Activity显示在同一界面
- Android Studio之同一应用创建多个Activity(一)
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- Android用shareUserID实现多个Activity显示在同一界面
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- JavaScript substr,substring,slice,splice
- 在eclipse中运行maven命令没有反应,console也不打印信息
- 数学建模(13)——MATLAB寻找最短路径(Dijkstra算法和Floyd算法)
- 记windows10下安装dlib失败经历
- 第4章 常用对象【下】 案例
- 多activity使用同一socket
- 【leetcode】58. Length of Last Word(Python & C++)
- Html——canvas学习
- POJ 2836 Rectangular Covering(状压dp)
- 1011
- 【from zero to zero】noip2017
- [js高手之路]设计模式系列课程-设计一个模块化扩展功能(define)和使用(use)库
- 树莓派Android Things物联网开发:按键中断及消抖
- Java关键字static和final