Comment faire pour exécuter le service pas sur le thread principal?

Je suis en train de lancer service puis ouvrez socket avoir une connexion avec le serveur.

Sur le bouton cliquez sur j'créer de nouveaux Thread puis démarrer le service.

Thread t = new Thread(){
        public void run(){
            mIntent= new Intent(MainActivity.this, ConnectonService.class);
            mIntent.putExtra("KEY1", "Value used by the service");
            context.startService(mIntent);
        }
    };
t.start();

Puis sur service, j'essaie d'ouvrir socket et disposent d'une connexion avec le serveur

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    //TODO do something useful


    try {
        InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
        socket = new Socket(serverAddr, SERVERPORT);
        Scanner scanner = new Scanner(socket.getInputStream());
        message = scanner.nextLine();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return Service.START_NOT_STICKY;
}

Mais quand je l'appelle, j'ai erreur

08-30 08:56:49.268: E/AndroidRuntime(3751): java.lang.RuntimeException: Unable to start service com.example.testofconnection.[email protected] with Intent { cmp=com.example.testofconnection/.ConnectonService (has extras) }: android.os.NetworkOnMainThreadException*

Je pense que le problème est que service est sur main thread, mais je ne trouve pas comment dois-je démarrer le service sur les nouvelles (independend) filetage pour garder connection alive?

  • J'ai besoin de garder la connexion avec le serveur en vie. AsyncTask ne s'ouvre connexion, envoie une demande, a obtenu certains de réponse et se ferme, donc j'ai trouvé que le service que je peux la mettre en œuvre
  • developer.android.com/guide/components/services.html. vérifiez le cadre du sujet à l'extension de la classe du service
InformationsquelleAutor Ragaisis | 2013-08-30