web-dev-qa-db-ja.com

コンテキストを参照せずにAssetManagerを取得するにはどうすればよいですか?

アプリケーションのAssetManagerへの参照を取得する必要があるクラスがあります。このクラスは、いかなる種類のAndroid UIクラスも拡張しないため、getContext()メソッドなどはありません。静的なContext.getCurrentApplicationContext()メソッドのタイプ?

明確にするために:私のクラスは、他のアプリケーションのために、ライブラリのように使用することを目的としています。関連するAndroidManifest.xmlはなく、それを呼び出しているコンテキストを制御することもできません。

19
ab11
  1. Application のサブクラスを作成します。たとえば、_public class App extends Application {_
  2. _Android:name_の_<application>_タグの_AndroidManifest.xml_属性を、新しいクラスを指すように設定します。 _Android:name=".App"_
  3. アプリインスタンスのonCreate()メソッドで、コンテキスト(例:this)をappという名前の静的フィールドに保存し、このフィールドを返す静的メソッドを作成します。例: getApp()

これはそれがどのように見えるべきかです:

_public class App extends Application{

    private static Context mContext;

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

    public static Context getContext(){
        return mContext;
    }
}
_

これで、コンテキストを取得するときはいつでもApp.getContext()を使用してから、getAssetManager()(またはApp.getContext().getAssetManager())を使用できます。

23
Cristian

OPの質問に対する最良の答えがわかりません。ただし、 Android開発者向けリソース :で提案されているように、静的コンテキストを使用する場合は十分に注意する必要があることを私は知っています。

アプリインスタンスのonCreate()メソッドで、コンテキスト(例:this)をappという名前の静的フィールドに保存し、このフィールドを返す静的メソッドを作成します。例: getApp()

静的コンテキストを使用すると、特に静的コンテキストがビューへの参照に使用される場合、リークされたメモリの問題が発生する可能性があります。

7
gymshoe