2012-04-07 2 views
1

Je crée une application de serveur client dans laquelle l'application android fonctionne comme serveur. le code client est écrit en Java. ce que je veux faire est d'écouter la connexion en permanence dans l'arrière-plan de l'application Android tandis que l'utilisateur peut continuer à faire d'autres choses dans l'application.Le délai d'expiration du lancement a expiré

partie du code client java est

Socket socket1 = null; 
    DataOutputStream dataOutputStream = null; 
    DataInputStream dataInputStream = null; 
    socket1 = new Socket(GlobalState.waiterip, 8888); 
    dataOutputStream = new DataOutputStream(socket1.getOutputStream()); 
    dataInputStream = new DataInputStream(socket1.getInputStream()); 
    dataOutputStream.writeUTF("1"); 

code d'activité android est

Button tabstatus,menu,logout,inbox; 
public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.waiterhome); 
     tabstatus=(Button)findViewById(R.id.tabstatus); 
     menu=(Button)findViewById(R.id.menu); 
     logout=(Button)findViewById(R.id.logout); 
     inbox=(Button)findViewById(R.id.inbox); 
     Intent myIntent = new  Intent(getApplicationContext(),WaiterService.class); 
     startService(myIntent); 
     tabstatus.setOnClickListener(new OnClickListener() 
     { 
    public void onClick(View v) 
    { 
       //some code   } 
    }); 
     menu.setOnClickListener(new OnClickListener() 
     { 
    public void onClick(View v) 
    { 
       //some code 
    } 
    }); 
     logout.setOnClickListener(new OnClickListener() 
     { 
    public void onClick(View v) 
    { 
     //some code 
    }); 
     inbox.setOnClickListener(new OnClickListener() 
     { 
    public void onClick(View v) 
    { 
     //some code 
    } 
    }); 
     } 
    } 
Code

pour le service androïde im à partir-à-dire WaiterService est

public class WaiterService extends Service 
    { 
    public IBinder onBind(Intent intent) 
    { 
     return null; 
    } 
    public void onCreate() 
    { 
     ServerSocket serverSocket = null; 
      Socket socket = null; 
    DataInputStream dataInputStream = null; 
    DataOutputStream dataOutputStream = null; 
    try 
    { 
     serverSocket = new ServerSocket(8888); 
     while(true) 
     { 
     socket = serverSocket.accept(); 
      dataInputStream = new DataInputStream(socket.getInputStream()); 
      dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
      int op=Integer.parseInt(dataInputStream.readUTF()); 
      switch(op) 
      { 
      case 1://some code 
           break; 
      } 
    } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
    } 

J'ai également inclus la description de service dans le fichier manifest.xml

quand je lance ce code, je reçois des erreurs dans logcat que suivre

04-07 12:23:53.393: W/ActivityManager(51): Launch timeout has expired, giving up wake lock! 
04-07 12:23:53.399: W/ActivityManager(51): Activity idle timeout for HistoryRecord{44e00278 aac.imenu.MyDroidClient/.WaiterActivity} 
04-07 12:24:03.510: W/ActivityManager(51): Timeout executing service: ServiceRecord{44dde9b0 aac.imenu.MyDroidClient/.WaiterService} 

et écran de l'émulateur devient noir et pas pour l'activité est IUG shown.also communication socket ne se fait pas.

Je ne sais pas où exactement le problème est, SVP me guider comment résoudre ce problème. ou existe-t-il une autre méthode d'écoute continue en arrière-plan.

Répondre

0

Je pense que vous pouvez ignorer cette erreur, car cela pourrait ne pas être la cause du problème.

Vérifiez la question here

+0

alors quel pourrait être le problème? parce que je ne peux pas aller plus loin jusqu'à ce que ce problème ne soit pas résolu. – chintansavla

0

Une raison possible pourrait être que votre socket serveur bloque le thread principal. Essayez de mettre le socket serveur à l'écoute dans un processus séparé.

+0

quoi u signifie exactement en le mettant dans un processus séparé ?? – chintansavla

+0

Les composants peuvent être exécutés dans un processus séparé par l'attribut android: process. Cependant, à la réflexion, il semble que le fait de l'exécuter dans un fil séparé peut servir le but. –

+0

essayé diverses combinaisons de threads, mais toujours pas de succès! également essayé asynctask. merci de me suggérer une solution. – chintansavla

Questions connexes