我正在考慮在我的應用程序中使用遠程服務,但我在CommonsWare的this thread(以及其他線程)的答案中看到,看起來遠程服務存在諸如浪費CPU,內存和電池壽命等許多缺點/顧慮。這讓我猶豫不決。所以,我想通過專家在這裏第一次運行我的想法:遠程服務有多糟?
問題1:鑑於我的應用程序的應用程序(如下圖),你認爲這是一個使用遠程服務的一個壞主意?或者,這是正確的路要走嗎?
我的應用程序有兩部分,Wi-Fi客戶端在PC上運行,Wi-Fi服務器在Android上運行。他們通過Socket來回傳輸位於SD存儲卡中的應用程序數據文件。 Android應用程序擁有超過48,000行代碼,相當大,我會說。當它啓動時,它會自動啓動服務。該服務然後創建一個單獨的線程,呼叫ServerSocket.accept()
在線聽。即使Android應用程序未運行,用戶也可以按PC上的按鈕啓動文件傳輸。
我明白服務的生命週期與活動無關;我不介意用戶是否可以通過設置殺死應用程序和服務 - 他殺了它,他必須重新啓動應用程序才能啓動服務器。他選擇殺死它,他會自己開始。
但是如果Android系統在沒有用戶的知識的情況下殺死了進程呢?在這種情況下,用戶不知道Wi-Fi服務器已經死機,當他點擊PC上的按鈕時他會收到錯誤。因此,即使進程被系統中止,我也希望服務器保持運行。因此,我認爲遠程服務就是答案。或者,是嗎?
問題2:如何在應用程序和遠程服務之間建立一個簡單的單向通信?
兩者之間的唯一溝通是應用程序需要知道服務的狀態,比如它是在Socket上偵聽,還是在運行等等。如果死了,用戶可以從應用程序的用戶界面重新啓動它。
我不想使用AIDL,它似乎是一種矯枉過正;全局變量不起作用,因爲它們不在同一個進程空間中;即使是Application
單身人士似乎也沒有工作。所以現在我正在考慮使用共享首選項,或者在內部存儲中創建一個文件。我還沒有試驗這些想法,但他們會工作嗎?如果沒有,更好的想法?
感謝您閱讀本文!
謝謝你的提示。是的,前臺服務似乎是一個更好的解決方案。它不佔用額外的內存空間,據說可以活得很長,應該足夠滿足我的目的。非常感謝。 – wwyt
@Yury我只是想在後臺發送圖像,並顯示在listview行中特定上傳的用戶狀態,我的意思是說使用服務的http通信,並通知UI上的用戶,然後我應該使用前臺服務權限?遠程服務不是必需的。我對嗎? – Ankit
我也有與Ankit相同的問題。我也想確保這一點。 – thekevshow