前阵子的只能小灯的创新实验课上,需要使用Android客户端连接智能小灯实现交互,就用上了socket,一开始对socket并不是很了解,就按照正常的流程进行创建和使用socket,后来发现socket创建时会使APP闪退。后来发现socket不能再主线程中创建,会导致线程堵塞甚至导致APP崩溃,查找网络的资料才发现socket和HTTP一样,在主线程中不能创建,需要创建一个子线程去执行创建socket或者HTTP的操作。
示例如下 :

public class ServerThread implements Runnable { 2     Socket s = null; 3     BufferedReader br = null; 4  5     public ServerThread(Socket s) throws IOException { 6         this.s = s; 7         br = new BufferedReader(new InputStreamReader(s.getInputStream(), 8                 "utf-8")); 9     }10 11     public void run() {   //子线程中对socket进行创建12         try {13             String content = null;14             while ((content = readFromClient()) != null) {15                 for (Iterator it = MyServer.socketList.iterator(); it16                         .hasNext();) {17                     Socket s = it.next();18                     try {19                         OutputStream os = s.getOutputStream();20                         os.write((content + "\n").getBytes("utf-8"));21                     } catch (SocketException e) {22                         e.printStackTrace();23                         it.remove();24                         System.out.println(MyServer.socketList);25                     }26                 }27             }28         } catch (IOException e) {29             e.printStackTrace();30         }31     }32 33     private String readFromClient() {34         try {35             return br.readLine();36         } catch (IOException e) {37             e.printStackTrace();38             // MyServer.socketList.remove(s);39             MyServer.socketList.remove(s);40         }41         return null;42     }4344 }

同样的socket创建以后,需要进行通信,就有数据的传输,读写文件流字节流也需要在子线程中完成。

更多相关文章

  1. android的线程安全
  2. Android的进程、线程与优先级
  3. Android关于回调函数的定义及用法
  4. AsyncTask的使用半解--!
  5. android中的多线程编程及消息机制
  6. Android--线程池实现方式解析
  7. uniapp解决多条socket连接冲突问题
  8. 如何解决本地大批量数据的更新,和后台的同步,讲解socket的IPC和soc
  9. 【Android个人理解(一)】通过Looper与Handle的关系,理解Looper工作

随机推荐

  1. IFL嵌入式小组技术博客入口导航
  2. Cannot add extension with name 'androi
  3. Android简明开发教程十六:Button 画刷示例
  4. android学习笔记20--------------Relativ
  5. android中wifi原理及流程分析(很经典)
  6. android 输入法弹出 标题栏不被顶出去
  7. Android系统中自带了很多图标,我们的程序
  8. Android内部存储和外部存储的几个概念(内
  9. ListView点击效果设置
  10. ibmdeveloper上的android 的文章