Java Android 套接字线程

标签 java android multithreading sockets runnable

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

相关文章:

java - 是否允许在 MBean 内处理线程?

java - 并发读取文本文件并将数据放入数组的线程

java - 用两种可能的实现定义 bean

java - REST API 调用是否应该在存储库层上使用 @Repository 进行?

android - 具有适用于 Android 和 iOS 的相互证书的消息安全性

android - 将对象从一个 Activity 传递到另一个 Activity 的最佳方式

Java 发生之前澄清以及如何在两个线程之间安全地来回传递对象

java - 使用 ANT 从两个独立的 Web 应用程序构建 1 场 war

java - 识别谁购买了 PayPal - IPN

java - 静态对象(例如单例)会泄漏非静态上下文吗?为什么?