簡體   English   中英

調用onPause時保存大量數據?

[英]Saving large amounts of data when onPause is called?

對於我的應用程序,我有大約15Mb(可以壓縮一些處理能力到大約5Mb)的音頻+視頻+圖像數據,我需要保存到磁盤。 例如,我需要在用戶通過電話中斷(因為活動可能在此之后被殺)以及用戶離開應用程序時保存此項。

如果我不壓縮它,我可以在大約10秒內將數據保存到SD卡,如果我壓縮它,我可以將它保存到SD卡,我希望它壓縮。 當調用onPause時,我有什么選項可以保存我的數據,這樣我可以確定數據已被保存?

從一些基本實驗中,如果onPause在5秒后沒有完成,我的活動就會被殺死。 我有一些想法:

  1. 在onPause中啟動一個新線程並在那里保存數據。 這似乎工作正常,但似乎是我不應該做的事情。

  2. 啟動服務,以某種方式將數據復制到服務(這會很慢嗎?)然后獲取服務以保存數據。 我認為這會在手機頂部放置一個通知圖標,但我不認為用戶在這里看到“保存數據...”任務是不可思議的。

  3. 我可以快速將數據放入SQL數據庫中,然后在用戶返回應用程序后保存嗎?

(由於應用程序的性質,我實際上沒有任何實際的方法可以保存數據,因為用戶可以通過耗時的操作以破壞性方式轉換數據(例如,某些操作需要10秒)。即使我存儲了原始數據和為重新創建數據而執行的操作列表,用戶在下次啟動應用程序時必須等待一兩分鍾才能處理此數據。)

當調用onPause時,我有什么選項可以保存我的數據,這樣我可以確定數據已被保存?

從技術上講,你想要的是不可能的。 onPause()之后沒有任何保證。

最好的答案是@ViktorLannér所建議的。 換句話說,不要等到onPause()需要做10-20秒的I / O. 設計一些機制,允許您在用戶執行操作時以增量方式保存,如果沒有別的話,則作為回退機制。 這類似於數據庫維護事務日志的方式。

在onPause中啟動一個新線程並在那里保存數據。 這似乎工作正常,但似乎是我不應該做的事情。

這很危險,因為如果活動正在關閉(例如,將立即調用onDestroy() ),Android可能會在您的線程完成之前終止您的進程。

啟動服務,以某種方式將數據復制到服務(這會很慢嗎?)然后獲取服務以保存數據。 我認為這會在手機頂部放置一個通知圖標,但我不認為用戶在這里看到“保存數據...”任務是不可思議的。

使它成為一個IntentService ,因此它在工作完成時自動關閉。 我不會“將數據復制到服務”,而是在需要時由靜態數據成員集中提供數據。 這不會自動將“通知圖標放在手機頂部”,對於這段時間內的某些內容,可能不需要。

我可以快速將數據放入SQL數據庫中,然后在用戶返回應用程序后保存嗎?

對於SQL數據庫而言,Flash I / O並不比其他任何東西快。

由於應用程序的性質,我實際上沒有任何實際的方法可以保存數據,因為用戶可以通過耗時的操作以破壞性的方式轉換數據(例如,某些操作需要10秒)

那么這可能不是為移動平台設計的。 考慮這個應用程序是否適合使用該技術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM