2017-09-19 8 views
0

Retrofitによって生成されたオブジェクトをキャッシュする必要がありますか、またはオンザフライで作成することをお勧めしますか?Retrofitインスタンスをメモリに保存することをお勧めしますか?

私は、Retrofitで作成したインスタンスをキャッシュするための非常に基本的なロジックから始まった古いネットワークフレームワークからRetrofitへの段階的な移行を開始しています。しかし、

static public <T> T getApi(Class<T> apiInterface) { 
    validateInitialization("getApi()"); 

    if (!mApis.containsKey(apiInterface.getSimpleName())) { 
    mApis.put(apiInterface.getSimpleName(), retrofit().create(apiInterface)); 
    } 

    return (T) mApis.get(apiInterface.getSimpleName()); 
} 

我々はスキーマが改修を使用するように移行し続けて:これは、異なる活動/断片的に異なるエンドポイントを使用する当社のアーキテクチャに起因して、この方法は、アプリのユーザーの訪問異なる部分として呼び出されますこのマップはサイズが増加しています(現在、約20の異なるインタフェース/ apiを作成できます)。また、使用されなくなったインスタンスが含まれることもあります。

+0

シングルトンとdagger2と必要なところに注入します。 https://github.com/googlesamples/android-architecture-components/blob/master/GithubBrowserSample/app/src/main/java/com/android/example/github/di/AppModule.javaは役に立ちますか? – Raghunandan

答えて

2

答えは「それは依存している」と言います。

Retrofitに固有のこれらのオブジェクトをキャッシュすることには、(私が知っている)欠点はありません。これらのサービスオブジェクトは、デバイスのバッテリ寿命やそのような不具合に大量の負担をかけるようなものではありません。

サービスオブジェクトによって消費される可能性のある「余分な」メモリが消費される可能性はありますが、再利用はできませんが、ガベージコレクションはできません。また、すべての呼び出しに対して新しいサービスオブジェクトを作成することによって発生します。選択する唯一の方法は、アプリとユーザーの行動や嗜好を分析して、どの方向に進むかを決めることです。

私の個人的な経験では、新しいサービスオブジェクトをその場で作成する際のパフォーマンスコストを心配していません。これを実行した結果、私のアプリのスピードには目に見える差異がないことに気づいたことはありません。

一般に、私はの前に最適化することについて助言しますが、問題の証明があります。私はRetrofit.create()が私のユースケースでは遅すぎるという証拠はないので、私は毎回それを呼び出しています。

関連する問題