Je suis en train d'écrire une application d'exemple pour créer un serveur sur Android et un client pour se connecter à un PC. J'ai mis le serversocket dans un thread d'un service. Tout se passe parfaitement, jusqu'à ce que quelques minutes après l'écran s'éteigne. Cela peut être Android qui tue mon serveur, j'ai essayé de mettre un verrouillage complet à mon code et il ne se fait plus tuer, cependant, JE veux que l'écran s'éteigne comme d'habitude. Voici mon code:
public class MessageListener extends Service {
private ServerSocket serverSocket;
@Override
public void onCreate() {
Log.v("Test", "Créer un service");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
PowerManager.WakeLock wl=null;
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
startServer();
if(wl!=null) wl.release();
return START_STICKY;
}
private Runnable thread = new Runnable() {
@Override
public synchronized void run() {
try {
serverSocket = new ServerSocket(Integer.parseInt(5000));
ObjectInputStream in = null;
while (true) {
Socket client = serverSocket.accept();
Log.v("TCP", "S: Réception en cours...");
try {
in = new ObjectInputStream(client.getInputStream());
DataInController data = new DataInController(
getApplicationContext());
data.processDataIn(in.readObject(), client);
} catch (ClassNotFoundException e) {
System.out.println("TCP S: Erreur dans l'écoute du serveur PC");
e.printStackTrace();
} finally {
client.close();
}
}
} catch (IOException e) {
}
}
};
private Thread serverThread;
private synchronized void startServer() {
if (serverThread == null) {
serverThread = new Thread(thread);
serverThread.start();
}
}
private synchronized void stopServer() {
if(serverThread!=null){
Thread t=serverThread;
serverThread=null;
t.interrupt();
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v("TCP", "Service en cours d'arrêt !!!!!!!!!!!!!!!!!!!!!!!");
if (serverSocket != null) {
try {
serverSocket.close();
stopServer();
Log.v("TCP", "Serveur socket fermé");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}