我有一个尝试连接到服务器的客户端类。但正如你所知,你不能 在主 UI 线程上执行网络操作。所以我必须为每个操作创建不同的线程。
当前代码:
package com.example.justus.rocchat;
import android.os.AsyncTask;
import android.util.JsonWriter;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
/**
* Created by justus on 13-1-2015.
*/
public class Client
{
private String name;
private int port;
private String hostAddress;
private Socket socketClient;
private MainActivity mainActivity;
public boolean isConnected;
public Client(MainActivity mainActivity, String hostAdress, int port)
{
this.hostAddress = hostAdress;
this.port = port;
this.mainActivity = mainActivity;
}
public void send(final byte[] data)
{
Thread sendThread = new Thread(new Runnable() {
public void run()
{
try
{
DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
out.write(data);
System.out.println("writed data");
} catch (IOException ex) {
}
}
});
sendThread.start();
}
public void connect()
{
Thread connectThread = new Thread(new Runnable() {
public void run() {
try
{
System.out.println("trying to connect");
socketClient = new Socket(hostAddress, port);
isConnected = true;
}
catch(UnknownHostException ex)
{
System.out.println("ex:" + ex.getMessage());
}
catch (IOException ex)
{
System.out.println("ex:" + ex.getMessage());
}
}
});
connectThread.start();
}
}
这样是不是有点过分了?有没有更好的方法来处理这个操作? 非常感谢您抽出时间。
最佳答案
AsyncTask 是处理异步操作的公认方法。它是 Thread 类的包装器,并且是 Android SDK 的一部分。它们只能用于持续时间不超过几秒的操作,对于较长的操作,您应该使用服务。
developer.android.com/reference/android/os/AsyncTask.html
关于Java Android 套接字线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27931015/