2017-01-16 53 views
0

我有一個需要存儲來自傳感器的關鍵信息的android應用程序。傳感器每5毫秒更新一次數據。我需要將這些數據點中的每一個都保存在文本文件的內部存儲器中。Android應用程序每5 ms寫入一個文件

在目前的情況下,我在內存中收集數據點2秒,然後在2秒鐘結束時寫入文件以節省電池壽命。但是,在應用程序崩潰的情況下,我放棄了關鍵數據點。

有沒有人有任何建議如何處理?

是否每5ms將數據點寫入文件是一個好主意。這是否會顯着降低電池壽命並增加CPU的負載?如果有人遇到過類似的情況,請分享您如何解決問題?

+0

每隔5ms收集一次數據並存儲到本地數據庫。因爲在文件上寫入會每5ms花費你很多。並且爲了寫入文件,將其設置爲1天的間隔。 – TheLittleNaruto

+0

不是諷刺,但如果你正在處理重要信息,那麼你的應用程序不會崩潰!另外,在碰撞期間你將失去更多的數據,然後在2秒鐘內。唯一的場景是 – lionscribe

+0

,如果你正在寫一個外部文件,那麼崩潰不會影響文件。只需寫入一個文件,例如txt,然後在再次寫入之前,讀取當前內容,追加新內容並重寫你的文件。 – Mushirih

回答

0

由於您的應用程序是關鍵,我會考慮通過在您的應用程序類中調用Thread.setDefaultUncaughtExceptionHandler來設置DefaultUncaughtExceptionHandler。通過處理程序中的這種方式,您可以編寫所有未保存的數據,並且可以重新啓動應用程序以繼續處理關鍵數據。我會在那裏放置一些秒計數器,以防止無限循環的崩潰。開源ACRA庫使用Thread.setDefaultUncaughtExceptionHandler,因此您可以從中瞭解如何使用它。
另一個想法是在單獨的進程中使用服務編寫數據,搜索「遠程服務」。這樣,即使應用程序崩潰,該服務仍然活着。您必須設置一些功能,以便如何在應用程序和服務之間共享數據。如果應用程序非常關鍵,那麼我會設置2個遠程服務,一個從傳感器獲取信息(並將其作爲備份進行緩存,直到確認它已寫入),另一個緩存數據並每隔幾秒寫入一次。每個服務也應該有一個DefaultUncaughtExceptionHandler,如上所述。這是除了實際的應用程序,這將有用戶界面。儘管這對資源有點浪費,但對於關鍵數據而言,這並不是浪費。

0

我不覺得有一個好方法。更重要的是避免崩潰也許

0

而不是每5毫秒寫入一個文件,這將是一個代價高昂的操作,您可以每5毫秒和每2秒將數據保存到SharedPreferences,將數據從SharedPreferences保存到文件中。即使應用程序崩潰,SharedPreferences內容也不會被刪除,因此您不會有任何數據丟失。

+0

不知道這是個好主意。我已閱讀了多個不同的帖子,暗示了這一點。SharedPreferences不應該用於頻繁的更新。它只能用於存儲不太頻繁更新的小塊信息。 – abhogu

1

我建議你研究你的應用崩潰的原因。如果你的應用程序由於內部異常而崩潰,那麼有一個更好的方法來處理這件事。

編寫一個很好的異常管理,並在出現異常時使用該塊將數據寫入內部內存。數據成功寫入後重新啓動應用程序。

由於外部原因,您的應用程序崩潰並且您無法捕獲異常,您必須考慮其他方法。

相關問題