Я разрабатываю приложение для 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'. Citing * Эффективная Java *: "* группы потоков устарели *". – Lii