2012-11-23 76 views
4

我正在創建一個需要始終通過TCP套接字連接的應用程序。我的應用程序在連接方面已經很好,但是當它發送到後臺時,android系統最終會終止進程。這會導致它與服務器斷開連接。如何讓我的應用程序在後臺運行?

我一直在尋找一種方法來始終保持應用程序活着,但沒有找到任何東西。 有人能告訴我什麼是最好的方式,以便我的應用程序在後臺處於關閉狀態,或者禁止這樣做,如果它關閉,它會自動重新啓動? 我開始與這一點,並正在生產我頭疼:S

編輯 這是我的代碼部分:

public int onStartCommand(Intent intent, int flags, int startId) { 

     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 

     new Thread(new Runnable() { 
      public void run() { 
       Playit();    } 
     }).start(); 


    return START_STICKY; 
    } 

的應用程序出現在啓動時被凍結,雖然。我沒有很多經驗,所以也許我的錯誤很簡單,我沒有注意到它。

回答

3

使用服務並通過startService()啓動它。它將運行Android的,直到它停止對資源

有些文檔上的服務:

  1. http://developer.android.com/reference/android/app/Service.html
  2. http://developer.android.com/guide/components/services.html
+1

對不起,我正在閱讀有關服務,我試圖創建一個,但如果我關閉應用程序的服務停止,我想當我關閉我的應用程序,服務繼續運行,當你重新打開應用程序檢查,如果服務仍在工作,如果沒有,請重新啓動它。 也許我的問題是愚蠢的,但我是一個新手,但仍然不太瞭解u.u – robertDraven

+0

如果您通過'startService'啓動服務,那麼當您停止活動時服務不會停止。 – RvdK

+0

因此,如果應用程序關閉,重新打開它,因爲我可以檢查服務是否正在運行?如果你剛開始使用StartService(意圖),我可以與服務的對象通信? – robertDraven

0

用戶Service。服務用於在後臺執行長時間運行的操作,例如在與服務器的連接中發送/接收數據。

0

看看Android的Service類。請注意,Service不是一個單獨的線程,它只是您的應用程序線程的一部分,它在操作系統的創建和銷燬方面的處理方式不同。

如果您需要額外的線程,您當然可以在Service中創建一個線程。

0

正如有人說,直回答你的問題是,以託管保持到服務活着的連接線程。

但是我想記住你,你是在一個資源有限的環境中,在後臺持久連接(與tcp協議的開銷)可能會導致電池耗盡和憤怒的用戶。

你應該問問自己,如果你真的想永久保持連接,或者在有限的時間內持續保持連接,或者在發生一些可能由gcm消息觸發的事件之後,或者如果你只需要進行輪詢,也許使用inexact alarm

另一種選擇是僅在應用程序處於前景時才建立連接。無論如何,這當然取決於你想要用你的應用程序做什麼。

+0

您讓我稍微解釋一下,我的應用程序需要進行安全連接,因爲其目的是「監視」我們的供應商。知道我需要的時候他們在哪裏。知道什麼時候他們走出他們的道路。所以我需要的是始終連接到我們的服務器。如果斷開連接,無法得到他的位置或一些數據來編譯我的應用程序 – robertDraven