我正在開發一個Android應用程序。與主線程溝通工作線程
此應用程序將有一個服務器來啓動DatagramSocket作爲服務器。它會等待傳入的消息。當套接字收到消息時,我會處理它。
要啓動UDP服務器套接字,我要使用本地服務。此服務將有一個工作線程,我將在其中收聽傳入的消息。
這是我未完成本地服務實現:
public class UDPSocketBackgroundService extends Service
{
private static final String TAG = "UDPSocketBackgroundService";
private ThreadGroup myThreads = new ThreadGroup("UDPSocketServiceWorker");
private Handler mServiceHandler;
@Override
public void onCreate()
{
super.onCreate();
Log.v(TAG, "in onCreate()");
}
@Override
public IBinder onBind(Intent arg0)
{
try
{
new Thread(myThreads, new UDPServerThread("X", 8888)).start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
這是我也未完成輔助線程執行:
public class UDPServerThread extends Thread
{
private static final int MESSAGE_SIZE = 256;
protected DatagramSocket socket = null;
protected boolean end = false;
public UDPServerThread(String serverName, int port) throws IOException
{
super(serverName);
socket = new DatagramSocket(port);
}
public void run()
{
while (!end)
{
try
{
byte[] buf = new byte[MESSAGE_SIZE];
// Wait an incoming message.
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// TODO: Notify Service with packet received
}
catch (IOException e)
{
// TODO Mensaje de error.
e.printStackTrace();
}
}
}
}
這些類都有自己的文件(他們是在不同的文件)。
這裏:
socket.receive(packet);
//TODO: Notify Service with packet received
我怎麼能通知我們已經收到一個數據包服務?我想發送服務該數據包也。
Here有一個關於如何從主線程到工作線程通信的例子。但是,我不需要,我正在尋找一個關於如何從工作線程到服務進行通信的例子。
我找到了這個example,但我不太瞭解它,因爲在這個例子中,兩個類都聲明它在同一個文件上。如你所見,我是Android開發的新手。
如果你知道更好的方法,請告訴我。
這個代碼有兩個大問題:首先,構造函數Thread(ThreadGroup ,Runnable)'被使用,並且'Thread'作爲第二個參數被傳遞。這是一個錯誤,這個線程永遠不會開始。應該在那裏使用非線程'Runnable'。其次,使用'ThreadGroup'沒有意義。引用*有效的Java *:「*線程組已過時*」。 – Lii