android中的线程机制(二)—SocketCallBack

来源:互联网 发布:网络艺术研究 编辑:程序博客网 时间:2024/05/23 23:39

一个经典例子让你彻彻底底理解java回调机制
http://blog.csdn.net/xiaanming/article/details/8703708

本博文转载自http://blog.csdn.net/xiaanming/article/details/9750689// 含有3个线程的线程池     private static final ExecutorService executorSocket = Executors             .newFixedThreadPool(3);     /**     *      * @param <T>   * @param url     *            WebService服务器地址     * @param methodName     *            WebService的调用方法名     * @param properties     *            WebService的参数     * @param webServiceCallBack     *            回调接口     */  public void callSocket(SocketPacket socketPkg,final SocketCallBack socketCallBack) {           this.socketPackage=socketPkg;       // 用于子线程与主线程通信的Handler            final Handler mHandler = new Handler() {             @Override             public void handleMessage(Message msg) {                 super.handleMessage(msg);                 // 将返回值回调到callBack的参数中                 socketCallBack.callBack((SocketPacket) msg.obj);             }         };         // 开启线程去访问WebService         executorSocket.submit(new Runnable() {             @Override             public void run() {        try {            socket = new Socket("192.168.2.103",9091);            System.out.println("客户端socket运行!");        } catch (UnknownHostException e) {        System.err.println("socket链接异常,链接信息:"+"192.168.2.102");            e.printStackTrace();        } catch (IOException e) {        System.err.println("socket IO异常");            e.printStackTrace();        }                      SocketPacket resPacket = null;                try {                resPacket =sentSocket(socketPackage);                } catch (Exception e) {                    try {                        System.err.println("socket发送消息异常,发送信息:"+new String(socketPackage.getByteStream()));                    } catch (UnsupportedEncodingException e1) {//                         System.err.println("socket将socketPackage转为字符串异常,socketPackage信息:"+socketPackage.getByteStream());                        e1.printStackTrace();                    }                    e.printStackTrace();               } finally {                     // 将获取的消息利用Handler发送到主线程                     mHandler.sendMessage(mHandler.obtainMessage(0,                     resPacket));                 }             }         });     }    /**     *      *      * @author     *      */     public interface SocketCallBack {         public void callBack(SocketPacket socketPacket);     }  
0 0