android加载字体内存泄漏的处理方法
在开发android app的开发过程中,会使用到外部的一些字体。外部字体在加载的时候,容易造成内存泄漏。
比如:
Typeface tf=Typeface.createFromAsset(getAssets(), Consts.LANTING_FONT_PATH);
title.setTypeface(tf);
如果在每次调用的时候都这样写,会造成每次执行的时候都会重新加载一次该字体,导致内存不断变大。
跑monkey测试的时候,执行:
adb shell dumpsys meminfo 【packgename】
此命令会打出当前应用内存占用情况,如下:
** MEMINFO in pid 26390 [packgemane] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 24372 23593 758
Dalvik Heap 30256 30020 0 0 39116 34608 4508
Dalvik Other 2254 2180 0 0
Stack 132 132 0 0
Cursor 8 8 0 0
Other dev 4 0 4 0
.so mmap 998 816 12 0
.apk mmap 1795 0 1636 0
.ttf mmap 115 0 76 0
.dex mmap 1215 56 980 0
Other mmap 406 4 88 0
Unknown 22295 22292 0 0
TOTAL 59478 55508 2796 0 63488 58201 5266 Objects
Views: 840 ViewRootImpl: 7
AppContexts: 6 Activities: 4
Assets: 39 AssetManagers: 39
Local Binders: 47 Proxy Binders: 29
Death Recipients: 0
OpenSSL Sockets: 0 SQL
MEMORY_USED: 296
PAGECACHE_OVERFLOW: 136 MALLOC_SIZE: 62 DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 116 80 28/19/5 /××××××4 16 110 9/18/4 /×××××× Asset Allocations
zip:/system/app/×××××.apk:/assets/fonts/Roboto-Light.ttf: 366K
zip:/system/app/×××××.apk:/assets/fonts/Lantinghei.TTF: 2344K
zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K
zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K
... ... ...
zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K
从日志可以看出CoreSansM25ExtraLight这个字体被加载了多次,导致内存泄漏。
如和解决字体内存泄漏呢?方法很简单:
将字体定义为常量,仅在oncreate方法中进行初始化即可。
Consts.TF_CORESANS_FONT = Typeface.createFromAsset(getAssets(), Consts.CORESANS_FONT_PATH);
android加载字体内存泄漏的处理方法的更多相关文章
- android加载大量图片内存溢出的三种方法
android加载大量图片内存溢出的三种解决办法 方法一: 在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @para ...
- Android加载大量图片内存溢出解决办法
当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...
- 【转】android加载大量图片内存溢出的三种解决办法
方法一: 在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @param scalSize 缩小的倍数 * @return ...
- Android 加载大图片到内存
本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- 图片--Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- 解决android加载图片时内存溢出问题
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过jav ...
- Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息
1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
随机推荐
- LeetCode 305. Number of Islands II
原题链接在这里:https://leetcode.com/problems/number-of-islands-ii/ 题目: A 2d grid map of m rows and n column ...
- OTL调用Oracle存储过程
OTL很早前用过,今天写东西要调存储过程,程序写完了,调试死活通不过,折腾了一早晨. 最后才发现错误,这里总结一下: 1.代码写的不规范. 有个参数后边少写了个“,”以至于总是抱错.而单独写的测试例子 ...
- Visualforce入门第五篇_2017.3.1
Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...
- dockerfile http_php
FROM centos6.6-php5.5:0.0.1 MAINTAINER syberos:wangmo RUN mv /etc/php.ini /etc/php.ini.bak COPY ./ph ...
- docker 摆渡镜像脚本
#!/bin/bash if [ $# != 1 ];then echo "Param error";exit; fi DOCKER_NAME=$1 IMAGE_TAG=${DOC ...
- Apache Htpasswd生成和验证密码
Assuming you create the password using the following command and "myPassword" as the passw ...
- java代码异常捕获throws抛出异常
总结:Throwable 是所以异常的父类.error和Exception是继承它的类 Exception: 这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环 ...
- sql语句中GROUP BY 和 HAVING的使用 count()
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多 ...
- Oracle redo 日志损坏的几种情况下的恢复
Oracle redo 日志损坏的几种情况下的恢复 第一:损坏的redo为非正在使用的redo log 1.归档模式,不是当前正在日志损坏,数据库打开模式. 模拟损坏:SQL> select * ...
- 实验吧CTF题库-密码学(部分)
这里没有key: 打开链接,有一个弹窗 然后就是一个空白网页,右键查看源代码 这里有一串js密文,解密一下,https://www.dheart.net/decode/index.php 得到flag ...