3

private static Resources mRes;次のように初期化された Utils クラスで静的参照を使用しても安全ですか?

public static void init(Resources res) {
    mRes = res;
}
.. later in activity
Utils.init(getContext().getResources());

私にはメモリリークが発生しているようです(以下のEclipse Memory Analyzerからのログ)

mOuterContext android.app.ContextImpl 
'- mContext android.content.res.Resources
  |- mRes class com.github.mikephil.charting.utils.Utils
  |- mResources android.app.LoadedApk
  |- mResources android.app.ContextImpl
  |- this$0 android.content.res.Resources$Theme
  |  '- referent java.lang.ref.FinalizerReference
  |     '- next java.lang.ref.FinalizerReference
  |        '- next java.lang.ref.FinalizerReference

アクティビティ全体をリークしていない Resources クラスへの参照を取得する安全な方法はありますか?

4

2 に答える 2

1

これが解決策です。アプリケーションが保持するアプリケーションコンテキストの静的参照を使用します

public class MyApplication extends Application
{
    private static Context context;

    public static Resources getResourcesStatic()
    {
         return context.getResources();
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        this.context = this.getApplicationContext();
    }
}

MyApplication.getResourcesStatic()どこにいてもリソースにアクセスするために呼び出すだけです。

于 2014-10-11T13:10:11.203 に答える