2013-02-25 29 views
3

我想在Activity暫停時保存一些數據量。我用我自己的ContentProvider支持SQLite數據庫。通過ContentProvider完成操作的可靠方法

假設,即同名但實際節電該方法是這樣的:

public void saveData() { 
    //perform operations over ContentProvider in current thread 
} 

問題是:這是安全的,只是調用這個方法在(使用新的線程)?

public void onPause() { 
    super.onPause(); 

    new Thread(new Runnable() { 

     public void run() { 
      saveData(); 
     } 
    }).start(); 
} 

或者我應該開始一個新的Service這將完成這項工作在後臺?或者,也許有更可靠的方法來確保數據被保存?

+0

只要Thread在有限的時間內終止,我就不會看到這個問題。但是,隨後的SQLite操作將在此期間阻止,因此非常快速的暫停恢復場景會稍微滯後。 – 2013-02-25 13:41:18

+0

@ User117問題是我不確定我可以稱爲「有限」。所以,假設這個線程將在不可預知的時間內終止。 – 2013-02-25 13:44:04

+1

考慮使用asyncTask。開始新線程需要更多時間。 – Leonidos 2013-02-25 13:49:22

回答

1

您可以嘗試使用綁定的後臺服務(更好,將您的Content Provider包裝一個)。這將使其獨立於活動狀態,只需在您希望的時候向您的提供商服務發送獲取/保存請求即可。

+0

你是什麼意思「使你的ContentProvider成爲一個」? – 2013-02-25 14:02:48

+0

@DmitryZaitsev哦..你不能同時擴展'Service'和'ContentProvider'。我的意思是wrap:擴展'Service'並保存一個'ContentProvider'對象。 – 2013-02-25 14:07:33

0

這是安全的,但我建議不要使用onPause()來達到此目的。它太頻繁地調用(請參閱活動生命週期文檔)。將其移動到onStop()。

+0

onStop不保證被調用。所以要小心。 – Leonidos 2013-02-25 13:47:27

+0

考慮onPause被調用的頻率和onStop的不可靠性,也許您可​​以考慮每次生成/修改新數據時保存它? – Budius 2013-02-25 13:53:48

+0

在我的例子中'onPause'不會經常被調用。我使用單個活動與一堆片段。 – 2013-02-25 13:55:50

相關問題