0

xml からロードされたデータ用に Android にシングルトンがあります。時々リサイクルされますが、その理由はわかりません。私の知る限り、シングルトンはアプリプロセスの存続期間を通じて存在するはずです。これが私のシングルトンです:

public class DataLib {

    public static CategoryList categories = new CategoryList();
    public static RegionList regions = new RegionList();
    public static CompanyTypeList types = new CompanyTypeList();
    public static SearchData searchData = new SearchData();
    public static CompaniesList companies = new CompaniesList();

    private static RegionData currentRegion;

    private static final DataLib INSTANCE = new DataLib();

    protected DataLib() {
    }

    public static DataLib getInstance() {
        return INSTANCE;
    }

    public static void loadData() {
        loadCategories();
        loadRegions();
        loadTypes();
    }

    /* ... some more static functions are here ...*/
}

ご覧のとおり、アクティビティによって直接インスタンス化されるのではなく、プロセス自体によってインスタンス化されます。データは、アプリケーションの開始時に DataLib.loadData() を呼び出すことによってロードされます。アクティビティは、データがロードされると終了します。

何がリサイクルをトリガーするのか、はっきりとはわかりません。アプリが長時間バックグラウンドに留まる必要がある場合もあれば、数分で終わる場合もあります。DataLib クラスのポインターをログに記録しているので、本当に変更された = リサイクルされたことがわかります。

何か案は?ありがとう。

編集:回答は部分的にマークされた回答 + コメントに含まれています。

4

1 に答える 1

3

時々リサイクルされますが、その理由はわかりません。

Android は「時々」プロセスを終了します。

場合によっては、アプリが長時間バックグラウンドに留まる必要がある場合もあれば、数分で終了する場合もあります

OS とユーザーは、必要に応じていつでもプロセスを取り除くことができます。シングルトンやその他の静的データ メンバーは、永続データのキャッシュである必要があり、バックグラウンド スレッドなどを使用してそのデータをロードします。

バックグラウンドで実行している特定の作業がある場合は、そのために を使用しServiceて、アクティビティとは無関係にバックグラウンドで作業を行っていることを OS に示す必要があります。これは、Android がプロセスを終了することを妨げるものではありません (たとえば、ユーザーの要求による) が、それ自体でプロセスを終了する可能性が少し低くなります (つまり、OS は他のプロセスを選択する傾向があります)。

于 2012-10-06T16:51:29.693 に答える