android 多线程

这里虽然是个socket的server端的例子  但是感觉多线程蛮到位的

参考 http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/

package com.example.an4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class Server extends Activity {
    private ServerSocket serverSocket;
    Handler updateConversationHandler;
    Thread serverThread = null;
    private TextView text;
    public static final int SERVERPORT = 6000;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.text2);
        updateConversationHandler = new Handler();
        //new ServerThread() 是一个ServerThread 类的实例 同时也是一个Runnable
        this.serverThread = new Thread(new ServerThread());
        this.serverThread.start();//创建新线程
    }
    @Override
    protected void onStop() {
        super.onStop();
        try {
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    class ServerThread implements Runnable {
        public void run() {
            Socket socket = null;
            try {
                serverSocket = new ServerSocket(SERVERPORT);
            } catch (IOException e) {
                e.printStackTrace();
            }
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    socket = serverSocket.accept();
                    //commThread实际上是Runnable
                    //还可以这样Runnable commThread = new CommunicationThread(socket);
                    CommunicationThread commThread = new CommunicationThread(socket);
                    new Thread(commThread).start();//创建新线程  注意! handler.post(xxx)并不能创建新线程的  因为没有start
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    class CommunicationThread implements Runnable {
        private Socket clientSocket;
        private BufferedReader input;
        public CommunicationThread(Socket clientSocket) {
            this.clientSocket = clientSocket;
            try {
                this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    String read = input.readLine();
                    //post(Runnable r) //这里要填一个Runnable的对象 
                    //Runnable是一个接口  怎么会有对象呢   哈哈  就是Runnable实现类的一个实例
                    //当然也可以用 匿名内部类的形式 Runnable read = new Runnable() {...}
                    // 这里 read 实际上是Runnable接口的实现类的实例
                    updateConversationHandler.post(new updateUIThread(read));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    class updateUIThread implements Runnable {
        private String msg;
        public updateUIThread(String str) {
            this.msg = str;
        }
        @Override
        public void run() {
            text.setText(text.getText().toString()+"Client Says: "+ msg + "\n");
        }
    }
}

 

posted @ 2013-10-24 22:37  cart55free99  阅读(339)  评论(0编辑  收藏  举报