2013-02-18 38 views
1

如果我打電話給外部Web服務,並且用戶旋轉設備,則活動將重新啓動(我知道您可以自己處理它,但不建議這樣做)。我知道我可以使用onRetainNonConfigurationInstance()來保存狀態。Android應用重新啓動活動 - 網絡IO正在發生什麼情況?

我有的問題是活動重新啓動後,飛行網絡IO發生了什麼?它會繼續嗎?是暫停還是被殺死?

我對Android(iOS人)頗爲陌生,因此重新開始活動很奇怪。

我們所做的一些網絡電話可能會重新啓動,但檢查購買不是其中之一。我如何處理這個問題,以便購買仍然正常工作?假設我會使用Asynctask(儘管我知道還有其他選擇,例如Executors)。

回答

1

對於需要在整個活動重新啓動(例如購買)中維護的網絡調用,請考慮使用service而不是在活動內部進行。

如果您的連接在活動內部定義爲實例變量,則在活動重新啓動時它將被銷燬/終止。

另一個替代方案,但我不建議,是實現一個application類,並保持你的連接,所以只要你的應用程序處於活動狀態,它就會持久化。

+0

我一直在尋找服務,就像處理它似乎很複雜,因爲它可以被殺死。一旦我們開始購買Web服務調用,阻止客戶端訪問的能力不太可能發揮作用,因爲有第三方系統被調用,我們無法控制。如果必須的話,我們可以做一個服務器端解決方案,但這與我們支持的其他任何東西完全不同。 – ahwulf 2013-02-18 21:10:57

+0

您可以通過以下方式降低服務中斷的可能性:1)維護'PowerManager'和'Wi-Fi' ** lock *。另外,僅使用您需要的資源,以免造成系統資源耗盡。 – iTech 2013-02-18 21:13:45

+0

與活動相比,服務的可能性要小得多,而這些決定部分取決於您的應用最近使用的時間。我不會太擔心,但iTech提到,你可以使用喚醒鎖。 – Karakuri 2013-02-18 21:20:40

0

您不應該在活動中處理請求,除非它們足夠簡單以便啓動(即不需要響應)。常見的用例是您正在與要在多個活動中處理的REST界面進行交互。基本思想是向服務發出請求並讓它爲您調解連接。 Google IO 2010有一個很好的lecture,你可以聽。

不建議在Application類中實現功能,因爲當內存緊張時,Android應用程序被Android終止時會出現奇怪的行爲。

+0

如果沒有做商業活動,編寫電子商務應用程序是很難的。我們有一個現有的複雜的Web服務層(完全不是REST),它被我們所有的iOS應用程序和我們的移動網站所使用。爲Android編寫一個新版本可能會導致開發時間過長,無法證明它的正確性。 – ahwulf 2013-02-18 21:15:29

+0

@ahwulf你在說什麼只是寫道:「我不認爲以正確的方式設計應用程序是值得的,我寧願有一些只在大多數時間纔有效的東西。」 – 2013-02-18 21:43:21

+0

不是我的設計或我的決定。這是一個很長時間以來一直存在的大量決策。 – ahwulf 2013-02-19 19:32:25

相關問題