1

私は小さなDBを持っており、MainDataManagerというクラスに次のように静的に格納されているシングルトンオブジェクトの必要なデータ抽出を読み取ります。

public class MainDataManager {
    private static Context context;
    public static MainDataManager mainDataManager = null;

    public static MainDataManager getInstance(Context ctx) {
        context = ctx;
        if (mainDataManager == null) {  
           ...get the data from DB
          ...put the data in static mainDataManager variable 
          } 
        return mainDataManager;
        }

これで、アプリのすべてのクラス/アクティビティで、MainDataManager.mainDataManagerデータに簡単にアクセスできます。

いつか、データをデータベースに保存したいと思います。

現在、私はの各活動でこれを行っています

 @Override
    protected void onPause() {
    super.onPause();
    saveState(); //saves the mainDataManager's data to the DB
    }

これを避けたいので、ユーザーがアプリを終了したときにのみデータベースを更新すれば(これが意味するものは何でも)、またはAndroidがMainDataManagerオブジェクトを破棄したい場合は、実際には十分に「保存」できると思います。

saveState()メソッド内のアクティビティに呼び出しを入れることはできonDestroy()ますが、MainDataManagerオブジェクトが破棄された場合にのみデータをDBに保存したいと思います。しかしonDestroy()、通常のオブジェクトにはありません。

それを処理するための最良の方法は何でしょうか?

ps各アクティビティでsaveState()を使用したくない理由onDestroy()は、データが非常に少ない場合でもデータベースへの保存が非常に遅いため(特に、古いAndroidスマートフォンの場合)、これはロジックではありません。 DBを更新するために破壊されています。

どうもありがとう

4

1 に答える 1

1

それを処理するための最良の方法は何でしょうか?

AsyncTaskおそらくfromを使用し、データを変更するアクティビティからのみ、そしておそらくデータを永続化する必要があるかどうかを通知するためにonPause()何らかのフラグを使用しているにもかかわらず、現在それを処理している方法。isDirty

あなたが待つことを望まない本当のonDestroy()理由は、それonDestroy()が呼ばれることが保証されていないということです。

MainDataManagerオブジェクトが破棄された場合にのみ、データをDBに保存したいと思います。

そのオブジェクトが「破棄」されることはありません。プロセスが終了するまで存続します。

于 2012-06-18T13:28:41.770 に答える