• Главная
  • Карта сайта
Не найдено

Android: использование кастомных шрифтов и возможные проблемы с утечками памяти

Опубликовано: 01.09.2018

Довольно часто есть необходимость в кастомизации стандартных элементов. Как пример, хотите использовать шрифты отличные от стандартных. О возможных проблемах при работе с шрифтами под Android и хочу рассказать.

Во-первых, посмотрим как можно подключить свой шрифт, если он лежит в assets/fonts директории:

Typeface tf = Typeface.createFromAsset(ctx.getAssets(), "fonts/myfont"); setTypeface(tf);

Вроде всё просто. Вот только, если у вас элементов около 200 (скажем, в списке ListView), то для каждого будет создан экземпляр Typeface. Как пишут , могут возникнуть утечки памяти на устройствах с Froyo (и некоторых других). Поэтому, предлагают кэшировать уже созданные экземпляры шрифтов.

Выглядеть это будет так:

public class Typefaces { private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>(); public static Typeface get(Context c, String name) { synchronized (cache) { if (!cache.containsKey(name)) { String path = "fonts/"+name; try { Typeface t = Typeface.createFromAsset(c.getAssets(), path); cache.put(name, t); } catch (Exception e) { e.printStackTrace(); } } return cache.get(name); } } }

Использовать так:

Typeface tf = Typefaces.get(getContext(), "MyFont"); setTypeface(tf);

Теперь утечки памяти не страшны. К тому же, работать такой код будет быстрее. Если вы попробуете создать одновременно 100-200 TextView с кастомным шрифтом, не кэшируя его, то сие дело может занять несколько секунд, что не очень понравится юзеру. А с кэшированием элементы будут созданы практически мгновенно.

Новости
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью

rss