![](/img/trans.png)
[英]How do I force a database flush when saving large amounts of data in Grails?
[英]Saving large amounts of data when onPause is called?
對於我的應用程序,我有大約15Mb(可以壓縮一些處理能力到大約5Mb)的音頻+視頻+圖像數據,我需要保存到磁盤。 例如,我需要在用戶通過電話中斷(因為活動可能在此之后被殺)以及用戶離開應用程序時保存此項。
如果我不壓縮它,我可以在大約10秒內將數據保存到SD卡,如果我壓縮它,我可以將它保存到SD卡,我希望它壓縮。 當調用onPause時,我有什么選項可以保存我的數據,這樣我可以確定數據已被保存?
從一些基本實驗中,如果onPause在5秒后沒有完成,我的活動就會被殺死。 我有一些想法:
在onPause中啟動一個新線程並在那里保存數據。 這似乎工作正常,但似乎是我不應該做的事情。
啟動服務,以某種方式將數據復制到服務(這會很慢嗎?)然后獲取服務以保存數據。 我認為這會在手機頂部放置一個通知圖標,但我不認為用戶在這里看到“保存數據...”任務是不可思議的。
我可以快速將數據放入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.