在terminal连上手机

adb shell dumpsys meminfo pagename(自己程序的包名)

发现自己的程序占用的内存很大,而且在 输入信息的最下面有个 Asset Allocations

他下面展示了 很多这种信息 而且有很多重复的

zip:/data/app//base.apk:/assets/fonts/FZHTJW.TTF: 3116K
  zip:/data/app/.apk:/assets/fonts/FZKTJW.TTF: 3836K

于是我就想 这个是不是会造成内存泄漏,上网一搜 果然

typeface =Typeface.createFromAsset(mAssetManager, "fonts/FZKTJW.TTF"); 这种方式创建的typeface不会被回收,重复创建就会造成内存泄漏。

解决办法:

在app初始化的时候创建一次,然后整个app直接引用他,这样内存就不会再增加了

也可以创建一个类来管理

public class FontManager {private static FontManager FONT_MANAGER;private AssetManager mAssetManager;private static final Map<String, Typeface> CACHE_FONT_MAP = new HashMap<String, Typeface>();private FontManager(Application application) {mAssetManager = application.getAssets();}public static void createInstance(Application application) {if (FONT_MANAGER == null) {synchronized (FontManager.class) {if (FONT_MANAGER == null) {FONT_MANAGER = new FontManager(application);}}}}public static FontManager getInstance() {if (FONT_MANAGER == null) {
//            FONT_MANAGER = new FontManager((Application) App.getContext());
//            synchronized (FontManager.class) {
//
//            }throw new NullPointerException("NullPoint Exception, Please call createInstance FONT_MANAGER!");}return FONT_MANAGER;}public Typeface getFont(FontType type) {if (type == null) {return null;}final String key = type.getValue();Typeface typeface = null;switch (type) {case FZFSJW:if (CACHE_FONT_MAP.containsKey(key)) {return CACHE_FONT_MAP.get(key);} else {typeface = Typeface.createFromAsset(mAssetManager, "fonts/FZFSJW.TTF");CACHE_FONT_MAP.put(key, typeface);}break;case FZKTJW:if (CACHE_FONT_MAP.containsKey(key)) {return CACHE_FONT_MAP.get(key);} else {typeface = Typeface.createFromAsset(mAssetManager, "fonts/FZKTJW.TTF");CACHE_FONT_MAP.put(key, typeface);}break;case FZHTJW:if (CACHE_FONT_MAP.containsKey(key)) {return CACHE_FONT_MAP.get(key);} else {typeface = Typeface.createFromAsset(mAssetManager, "fonts/FZHTJW.TTF");CACHE_FONT_MAP.put(key, typeface);}break;case FZSSJW:if (CACHE_FONT_MAP.containsKey(key)) {return CACHE_FONT_MAP.get(key);} else {typeface = Typeface.createFromAsset(mAssetManager, "fonts/FZSSJW.TTF");CACHE_FONT_MAP.put(key, typeface);}break;default:break;}return typeface;}public  enum FontType {FZFSJW("FZFSJW"),FZKTJW("FZKTJW"),FZHTJW("FZHTJW"),FZSSJW("FZSSJW"),//        FZFSJW("FZFSJW");String value;FontType(String value) {this.value = value;}public String getValue() {return value;}}// -----------------------------------------------------------------------// Convenient// -----------------------------------------------------------------------public static class FLFont {public static Typeface getFont(FontType type) {try {FontManager manager = FontManager.getInstance();return manager.getFont(type);} catch (NullPointerException e) {e.printStackTrace();}return null;}}

使用ttf文件造成的内存泄露相关推荐

  1. 使用BoundsChecker查找内存泄露

    以前搞开发时,曾经写过类似的文章,不过带不出来,最近VS推出了新版VS2010,而BoundsChecker也推出了适用于vc6, vs2005,vs2008,vs2010的新版本,于是下载下来试了一 ...

  2. Java内存泄露和内存溢出、JVM命令行工具、.JDK可视化工具、Java Class文件

    1.Java内存泄露和内存溢出对比 1.1 Java 内存泄露 内存泄露是指一个不再被程序使用的对象或变量还在内存中占用空间. 1.1.1判断内存空间是否符合垃圾回收的标准 在Java语言中,判断一个 ...

  3. 加载文件流_未关闭的文件流会引起内存泄露么?

    专注于Java领域优质技术,欢迎关注 来自:技术小黑屋 最近接触了一些面试者,在面试过程中有涉及到内存泄露的问题,其中有不少人回答说,如果文件打开后,没有关闭会导致内存泄露.当被继续追问,为什么会导致 ...

  4. python会不会内存泄露_记一次python 内存泄漏问题及解决过程 python 嵌套读取文件 内存泄露...

    如何解决Python2的内存泄漏问题 python本身不会造成内存泄露,如果用的C/C++写的模块(包),如果处理不好,可能会造成内存泄露,但是也是C/C++的模块造成的 欢迎来到四十五资源网,pyt ...

  5. 离开当前屏幕的判断方法_Android App内存泄露测试方法总结

    喜欢我的文章,欢迎关注微信公众号「软件测试艺术」,一起学习提高. 1. 内存泄露 Android系统为每一个运行的程序都指定了一个最大运行内存,超过这个值则会触发OOM机制,反应在界面就是闪退. Cr ...

  6. Android App内存泄露测试方法总结

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.内存泄露 二. Android的GC机制 三.为什么会内存泄露 四. 系统级别的内存管理 五.内存抖 ...

  7. 关于SDL混合显示中英文标准字体的方式以及SDL显示可能带来的内存泄露

    首先,我们从WIN10系统以下路径中找到字体库:simsun.ttc,他的路径一般为: C:\Windows\Fonts 文件夹中的宋体,常规即是我们要的内容 将其拷贝出来,即可作为我们显示时所用的字 ...

  8. 使用valgrind检测ATS插件中的内存泄露

    一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库 ...

  9. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露

    valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...

最新文章

  1. 【TortoiseSVN使用教程】
  2. python学习之matplotlib绘制动图(FuncAnimation()参数)
  3. Understanding transient variables in Java and how they are practically used in HashMap---reference
  4. php变量的引用与计数规则
  5. 各位程序员兄弟姐妹,新年好!
  6. Office 2010导致 VS2008 页面设计器无响应
  7. lucene全文检索mysql教程_对于数据库里的多张表怎么利用lucene等实现全文检索
  8. 《人月神话》阅读笔记3
  9. CodeM2018复赛
  10. 关于微信小程序的相关接口以及问题
  11. seo入门必备[转载]
  12. 湖南高职高考计算机,20XX湖南高职对口高考常德市大联考计算机专业试卷(4月)[整理](8页)-原创力文档...
  13. Visual Studio 各版本下载合集vs2005下载+vs2008下载+vs2010下载+vs2012下载
  14. 【U+】通用财务,附加数据库后,软件看不到账套。
  15. 游戏开发要学习哪些东西
  16. 线程的stop方法和interrupt方法
  17. 手机浏览器 JavaScript 调起百度地图导航
  18. 黑提葡萄水果宣传文案模版,水果店文案黑提葡萄
  19. android 自定义桌面,无需 root,3 个 App 帮你构建高效的 Android 桌面
  20. ubuntu conda 更新、下载模块包权限问题 'Permission denied'

热门文章

  1. 如果你有多余的想象力,请安放在手机上
  2. time gmtime localtime strftime 时间函数
  3. 英语作文计算机国际会议开幕词,学术会议发言稿 英文(精选多篇)
  4. 1.7 什么是软件生命周期模型?试比较瀑布模型,快速原型模型,增量模型和螺旋模型的优缺点,说明每种模型的适用范围
  5. 详解PROFINET通讯协议
  6. js实现文件下载并重命名
  7. 数据分析入门学习指南|零基础小白必看
  8. 应届生和往届生,谁更容易考研成功?
  9. 日志版本问题:Your binding is version 1.5.5 or earlier.Upgrade your binding to version 1.6.x.
  10. 管清友的股票投资课_笔记 _Part3