Ошибка распределения ресурсов Android - PullRequest
0 голосов
/ 08 апреля 2011

Мне нужно создавать новый шрифт каждый раз, когда происходит изменение в настройках шрифта приложения (Live Wallpaper).

Для этого я создаю шрифт в onSharedPreferenceChanged () в движке обоев, таким образом:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

         typeface = prefs.getString("customize_font_settings", "MyFont.ttf");
         AssetManager assmManager = App.getContext().getAssets();
         font = Typeface.createFromAsset(assmManager, typeface);

Где App.getContext (). GetAssets () относится к статическому экземпляру, чтобы правильно получить AssetManager.

Дело в том, чтокаждый раз onSharedPreferenceChanged () создается новый экземпляр AssetManager, благодаря чему он легко переполняет память.

Как создать ОДИНОЧНЫЙ экземпляр AssetManager, который останется неподвижным и не будет клонировать сам себя

Ответы [ 2 ]

0 голосов
/ 09 апреля 2011

Я отредактировал класс App таким образом, чтобы заставить работать код sgarman, но это не решает проблему:

Прежде всего, я не могу использовать «это». в статическом контексте, поэтому мне пришлось переписать класс getManager () следующим образом:

    private static AssetManager assetManager;


    public static AssetManager getManager(){

        if(assetManager == null) assetManager = mContext.getAssets();

           return assetManager;

        }

Это не решает проблему. Все еще активы дублируются.

0 голосов
/ 08 апреля 2011

В App, почему бы не создать статическую функцию, которая возвращает статическую ссылку на менеджер ресурсов?Вы уже на полпути.

Приложение

public static AssetManager getManager(){
   if(this.assetManager == null) AssetManager this.assetManager = this.getAssets();

   return this.assetManager;

}

Shared

font = Typeface.createFromAsset(App.getManager(), typeface);
...