gpt4 book ai didi

Java Android 套接字线程

转载 作者:行者123 更新时间:2023-12-01 12:01:58 24 4
gpt4 key购买 nike

我有一个尝试连接到服务器的客户端类。但正如你所知,你不能在主 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com