2012-12-27 119 views
0

我正在爲特定上下文設計自定義應用程序,該應用程序始終在相同硬件中運行,並且我將完全控制運行在其上的軟件。Android始終在後臺服務中使用套接字連接

我需要一個類似於推送連接的永久性套接字連接才能將小數據傳送到設備。用戶可能會更改爲不同的應用程序,因此我需要在套接字打開的情況下擁有後臺服務,並阻止Android將其殺死。我不能依靠第三方推送解決方案(甚至谷歌),因爲設備不會連接互聯網。

我看到很多與此主題相關的帖子,但他們都表明這不是一個好主意/可能。由於該應用程序將運行在一個特定的上下文,它不會傷害任何人:)

你能建議/指導我一下嗎?

Chers!

回答

0

它是偶爾遇害的大問題嗎?你不能只是檢查它是否正在運行,如果不是開始運行?要做到這一點在你的活動:

if (!isMyServiceRunning()) { 
    startService(); 
} 

... 

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (MyService.class.getName().equals(service.service.getClassName())) { 
    return true; 
     } 
    } 
    return false; 
} 

private void startService() { 
    Intent myService = new Intent(this, MyService.class); 
    startService(myService); 
} 
+0

多數民衆贊成我的最終解決方案,我會有的問題是從服務器獲取信息,而不是服務運行。我想我應該在服務器中有一個控制器來確定是否從android平板電腦收到並處理了該消息。由於該活動可能不在前臺,我想我必須爲此使用AlarmManager。 – biquillo

0

雖然我不建議打開的套接字連接即使沒有按任何數據。你可以嘗試保持插座式連接器使用異步任務開放。每當套接字連接關閉時,連接到 。你可以產生一個異步任務。

+0

對方可能會在任何時候向Android設備發送數據,這就是爲什麼我必須始終打開套接字:) – biquillo

相關問題