編集:「重複する質問」は、この質問に適用される回答を提供しません。そこで提供されるアプローチは、両方の警告を取り除くことはありません。また、私の質問には、そこに答えられていない2番目の部分が含まれています。バレーシングルトンを構築するための適切な方法
私は公式のチュートリアル、
https://developer.android.com/training/volley/requestqueue.html#singleton
に応じバレーシングルトンを構築する場合、私は「置かないでくださいと言って
private static VolleySingleton mInstance
と
private static Context mContext
の警告を取得します静的フィールド内のアンドロイドコンテキストクラス "を参照してください。私はこれについて他のStackoverflowの質問を読んだが、私は実際に何が起こっているかを説明するこの警告または答えを取り除く解決策を見出しませんでした。 はい私はこの記事を読んだ: Warning: Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run) しかし、私は該当する答えを抽出することができませんでした。私は実際にここで何かを瞬時に実行したり、漏れたりしないように変更する必要がありますか?
私は、これはジェネリックの略であることを知っている
public <T> void addToRequestQueue(Request <T> request)
で<T>
を使用する必要がなぜ私が理解しないもう一つは、ですが、私はそれらを削除した場合、それはまだ動作します。それがそこにある理由は何ですか?
これは私のバレーボールシングルトンで、誰かが警告や冗長性なしにそれを適切に構築するために私にアドバイスをしてください。
public class VolleySingleton {
private static VolleySingleton mInstance;
private static Context mContext;
private RequestQueue mRequestQueue;
private VolleySingleton(Context context) {
mContext = context;
mRequestQueue = getRequestQueue();
}
public static synchronized VolleySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new VolleySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request <T> request) {
getRequestQueue().add(request);
}
}
[警告:静的フィールドにAndroidコンテキストクラスを配置しないでください。これはメモリリークです(また、インスタント実行を中断します)](https://stackoverflow.com/questions/37709918/warning-do-not-place-android-context-classes-in-static-fields-this-is- a-memory) – Zoe
この投稿は、2つの警告のうち1つを取り除くだけです。 2番目は残っています。また、私の質問にはパート2があり、そこでは解決されません。 –
シングルトンは静的コンテキスト内にあり、シングルトンはコンテキストフィールド(静的かどうかは関係ありません)を持っているので、コンテキストフィールドは基本的に静的にアクセス可能です。 – Zoe