onclick 事件处理中 确定只是开启一个线程去socket?只是这样是不会阻塞UI线程的。非主UI线程本身就不会阻塞UI线程,可以发一下关键代码看看。

解决方案 »

  1.   

    package cn.com.autosoft.android.xmlbaster.client;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;public class BlasterClient extends Activity{
        /** Called when the activity is first created. */
    public static final String TAG = "blaster";
    public Button publish = null;
    public Button subscribe = null;
    public EditText edittext = null;
    public Socket socket = null;
    public BufferedReader br = null; 
    public PrintWriter out = null;
    public String data = "";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            publish = (Button)this.findViewById(R.id.Button01);
            edittext = (EditText)this.findViewById(R.id.EditText01);
            subscribe = (Button)this.findViewById(R.id.Button02);
            publish.setOnClickListener(sendRequest);
            
            
            subscribe.setOnClickListener(subscribeRequest);
            
        }
        
       
        
        public OnClickListener sendRequest = new OnClickListener(){ @Override
    public void onClick(View arg0) {

    new Thread( new Runnable(){ @Override
    public void run() {
    //Service是启动的socket连结
    Log.d(TAG, "-----******---------");
    Intent myintent = new Intent();
    myintent.setAction("cn.com.autosoft.android.InitBlasterService");
    startService(myintent);
    }
     
     }).start();

    }
        
        };
        

    }
      

  2.   

    你是在Sevice中去连接网络的?
    Sevice其实也是在主UI线程的,SsartService也不能有长时间的过程代码
      

  3.   

    run里面执行的是启动service,并不是socket链接。
      

  4.   

    谢谢大家了,我不应该在service中联接socket,应该写一个普通的类实现线程接口