2011-04-16 155 views
2

我正在編寫一個示例應用程序,以在Android上創建一個服務器並將客戶端連接到PC。我把serversocket放在服務的線程中。一切都很順利,直到屏幕熄滅幾分鐘後。這可能是Android殺死我的服務器,我試圖給我的代碼一個完整的喚醒鎖,它不會再殺了,但是,我希望屏幕像往常一樣關掉。 這裏是我的代碼:Android系統殺死我的服務器上的服務器

public class MessageListener extends Service { 

    private ServerSocket serverSocket; 

    @Override 
    public void onCreate() { 
     Log.v("Test", "Create 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: Receiving..."); 
        try { 
         in = new ObjectInputStream(client.getInputStream()); 

         DataInController data = new DataInController(
           getApplicationContext()); 
         data.processDataIn(in.readObject(), client); 

        } catch (ClassNotFoundException e) { 
         System.out.println("TCP S: Error in PC Server Listener"); 
         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", "Killing Service!!!!!!!!!!!!!!!!!!!!!!!"); 
     if (serverSocket != null) { 
      try { 
       serverSocket.close(); 
       stopServer(); 
       Log.v("TCP", "Closed server socket"); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

    } 
+0

[Similar problem](http://stackoverflow.com/questions/5147203/wifi-sleeps-even-withlock) – aeracode 2011-07-21 13:27:37

回答

3

兩件事情,對我們的工作:

  • Wi-Fi lock
  • 設置Wi-Fi休眠政策,從來沒有。有些設備會在沒有此設置的情況下關閉Wi-Fi無線電,即使程序鎖定了Wi-Fi無線電。
0

我發現了這個問題。這是路由器失去了與Android的連接。我試圖ping它,它說「無法訪問」,重新連接到無線網絡後,它的作品,但一段時間後,它再次來到

0

也試圖保持WakeLock。兩者都適用於我。

相關問題