Bonne pratique de la connexion TCP Android
Je suis en train de travailler sur une application Android qui nécessite une connexion TCP vers un serveur TCP(Écrit en Node.js)
Mon Android TCP est un peut envoyer des messages d'avant en arrière.
Mon spesific questions est:
- Quelle est la meilleure façon de gérer une connexion TCP vers un serveur dans Android ?
- Comment maintenir la connexion(fermer la connexion correctement sur onDestroy (), etc) ?
- Est-il bether chemin, puis à l'aide d'un AsyncTask(à l'Exception des normal de la classe Thread, ce qui n'est pas autorisé dans Android 4.0)
J'ai ma connexion de socket dans un AsyncTask comme ceci:
@Override
protected Void doInBackground(Void... params) {
try {
Log.d("TCP_MESSAGE", "Connecting...");
socket = new Socket(MY_LOCAL_IP, 8080);
dataOutput = new DataOutputStream(socket.getOutputStream());
inputstream = new InputStreamReader(socket.getInputStream());
input = new BufferedReader(inputstream);
while (!canceled) {
String message = input.readLine();
handleMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
La raison pour laquelle j'ai la connexion dans une AsyncTask est parce que je suis en utilisant android 4.0 et ne sont pas autorisés à utiliser le réseau de code dans un Thread.
source d'informationauteur Emil
Vous devez vous connecter pour publier un commentaire.
Un Service devrait propre à la connexion. Si vous avez besoin de garder la connexion pendant que votre application n'est pas en cours d'exécution, alors vous devriez en faire un de premier plan de services. Si vous ne pas en faire un de premier plan de services, assurez-vous de lier au service de vos activités de la garder vivante.
N'oubliez pas que le service fonctionne également sur le principal (UI) thread si vous avez encore besoin d'un thread séparé pour gérer la communication.
Si vous avez seulement une activité et vous voulez juste pour gérer les redémarrages en raison de modifications de configuration, puis vous pouvez gérer les changements de configuration vous-même, gardez la connexion détenues par un non-interface fragment, ou passer de la connexion à vous-même en utilisant onRetainNonConfigurationInstance()/getLastNonConfigurationInstance() (ce qui est dépréciée en faveur de l'utilisation de fragments).
Cela dépend fortement de la complexité de votre application, et de ce que vous voulez faire avec elle. Il n'existe pas de spécificités pour Android de réseau.
Ouvrir le socket à chaque fois que vous êtes tombé sur et de le conserver comme un champ de classe. Fermer quand
onDestroy()
est appelé. Assurez-vous de vérifier si elle n'est pasnull
premier.Vous pouvez utiliser des threads Java dans Android 4.0 (API14). Vous pourriez avoir une confusion: ce n'est pas permis dans Android est d'avoir le code réseau dans le thread principal (UIThread).