2012-08-13 57 views
1

你好,我有一個小聊天應用程序,綁定到我的服務創建一個與我的服務器的TCP/IP連接。 我使用aidl btw。Android unbindService

我的問題是,我不知道要處理屏幕方向,特別是在銷燬方法。

我希望我的服務始終處於在線狀態,並且我不想在應用程序破壞時停止它。

現在我已經對「onDestroy」方法unbindService(conn)解決了「泄漏連接問題」。

當活動被重新創建後被凍結。 謝謝,這裏有一些代碼片段。

serviceIntent = new Intent(getApplicationContext(),ChatService.class); 
    boolean result = bindService(serviceIntent, conn,Context.BIND_AUTO_CREATE); 
    startService(new Intent(getApplicationContext(),ChatService.class)); 
    Log.d(TAG, "Service binded"); 

@Override 
protected void onDestroy() { 
    Log.d(TAG, "ON DESTROY"); 
    unbindService(conn); 
    super.onDestroy(); 
} 

回答

2

服務沒有用戶界面,因此您可能會說這不取決於您的服務,而是您的活動。返回START_STICKYonStartCommand()它告訴你它必須運行,即使你解除綁定,基本上你可以綁定/解除綁定任何時間到持久性(不持續,直到android操作系統決定殺死它)運行服務。

在您的活動中覆蓋onConfigurationChange()方法並且什麼都不做,那麼在您的清單中使用android:configChanges="orientation"

+0

Thak你,這工作:android:configChanges =「orientation」 – Catalin 2012-08-18 22:13:27

0

尋找到一個ServicestartForeground()link)。如果您可以讓Service死亡但重新啓動,請查看onStartCommand()START_STICKY

0

每次都會發生這種情況,就像您遇到的情況一樣。有一個綁定的服務實際上試圖保持該活動在內存中的時間比其他時間長。我建議不要從onDestory的服務中解除綁定。我會根據命令取消綁定您的服務,如註銷按鈕而不是生命週期事件。

所以當你的屏幕旋轉時,你不會取消綁定它只會重新綁定已經運行的服務。如果你的用戶殺死Activity,那麼服務應該在某個時候清理乾淨,因爲系統應該看到一個綁定的Service正在運行而沒有附加任何東西,然後它將被系統清理。

+0

你好,謝謝你的回覆。我從onDestroy中刪除解除綁定,然後我得到「活動泄漏了最初綁定在這裏的ServiceConnection」,並崩潰我的應用程序。 – Catalin 2012-08-13 14:07:04