2013-05-26 85 views
0

我已經閱讀了幾篇關於android中後臺進程的文章。 但我有背景操作需要超過30秒的情況;例如:Runnable或意圖服務

  • 開始活動
  • 點擊按鈕
  • 創建可運行,呼叫服務器的一些數據
    爲30秒(請稍候消息)
  • 完成,發送消息到處理器
  • 屏幕方向發生在30秒的中間...

我知道活動被銷燬並被重新創建(同時線程內的線程已經被刪除(使其成爲靜態的,因爲潛在的內存泄漏而導致的處理程序)。
所以,我將需要創建可運行,並再次調用服務器....

我讀到intentService,據我所知,intentservice生命週期是相同的應用程序,所以我想我需要使用呢?

在這30秒的downloading/parsing/insertingdb(交易)之間處理屏幕方向的最佳做法是什麼? - >我不想使用onConfigurationChanged()方法。

這些問題的解決方案是什麼?

Thnx。

回答

1

與其將您的後臺操作與活動關聯起來,我建議您實施application object。只有應用程序對象與任何特定的應用程序相關聯,並且它在任何Activity對象之前創建,並且獨立於應用程序生命週期期間創建/銷燬的任何活動對象。我有一個應用程序,讓我的所有活動對象向自己的應用程序對象註冊。如果您做了類似的事情,那麼由於配置更改而導致任何特定活動被破壞並重新創建都無所謂。

0

您可以使用服務,但我認爲更好的解決方案將有靜態模型類,將由靜態處理程序更新將執行該工作。當發生定向時,活動可能會死亡,但不是應用程序。順便說一句,你可以添加這些線條來體現你的活動不會死:

<activity 
     android:label="@string/app_name" 
     android:name=".Counter_demoActivity" 
     android:configChanges="keyboardHidden|orientation|keyboard" > 

但是如果你不這樣做,你的活動是死亡和重新啓動,你可以通過閱讀靜態模型類

更新您的狀態
+0

嗯,你的意思是讓靜態類做後臺工作?是不是像IntentService類似的解決方案? – User1980

+0

@Oggie當然不是,IntentService是服務,所以他有服務生命週期。不適用。您可以說服務受到應用程序生命週期的限制,但並不總是正確的。 –

0

JobScheduler(minSdkVersion = 21 +)是可運行或意向服務的可靠替代方案。它具有內置的重試邏輯,並且不受Android O的服務背景限制。