16

質問を短くして、A-カテゴリのリスト、B-アイテムのリスト、C-単一のアイテムの3つのアクティビティを持つアプリケーションを作成しました。BおよびCで表示されるデータは、オンラインXMLから解析されます。ただし、A-> B1-> Cを通過し、次にAに戻ってからB1に戻る場合は、データをどこかにキャッシュして、XMLを再度要求する必要がないようにします。

私はAndroidとJavaプログラミングに不慣れで、たくさんグーグルで検索しましたが、それでも自分がやりたいことをする方法を見つけることができません(または単にどこを見ればよいかわからない)。

受信したすべてのデータをメインアクティビティA(HashMaps?ContentProviders?)に保存してから、BとCに渡す(以前と同じリクエストを受け取った場合)のは良い考えですか?

4

3 に答える 3

12

情報をキャッシュしたり、アプリケーションの状態を追跡したりする簡単で迅速な方法は、このブログ投稿で説明されているようにアプリケーションを拡張することです。

このブログ投稿では、次のように、マニフェストでCustomApplicationクラスを設定する必要があることを追加するのを忘れています。

<application [...] android:name="CustomApplication">

私のプロジェクトでは、getInstance を介してシングルトン スタイルに固執しています。

その他のリソース:この回答Android アプリのグローバル変数、およびこのブログ投稿

于 2010-06-14T16:24:59.827 に答える
2

メモリ上にある種のキャッシュを構築したい場合は、SoftReferences で Map を使用することを検討してください。SoftReferences は、データをしばらく保持する傾向がある一種の参照ですが、ガベージ コレクションを防ぐことはできません。

携帯電話のメモリは少ないため、すべてをメモリに保持するのは現実的ではありません。その場合、デバイスのセカンダリ ストレージにキャッシュを保存することをお勧めします。

Google の Collectionsから MapMaker をチェックしてください。これにより、2 レベルのキャッシュを便利に構築できます。これを行うことを検討してください:

/** Function that attempts to load data from a slower medium */
Function<String, String> loadFunction = new Function<String, String>() {
    @Override
    public String apply(String key) {
        // maybe check out from a slower cache, say hard disk
        // if not available, retrieve from the internet
        return result;
    }
};

/** Thread-safe memory cache. If multiple threads are querying
*   data for one SAME key, only one of them will do further work.
*   The other threads will wait. */
Map<String, String> memCache = new MapMaker()
                                .concurrentLevel(4)
                                .softValues()
                                .makeComputingMap(loadFunction);

デバイスのセカンダリ ストレージのキャッシュについては、Context.getCacheDir()を確認してください。あなたが私のようにずさんな場合は、そこにすべてを残して、システムがより多くのスペースが必要になったときにシステムがあなたのために物事をきれいにしてくれることを願っています:P

于 2010-06-14T16:54:02.167 に答える
-1

ここの Android リファレンスで説明されているように、データ ストレージを利用できますhttp://developer.android.com/guide/topics/data/data-storage.html

于 2010-04-20T18:41:23.267 に答える