当前位置:首页 » 安卓系统 » android图片释放内存

android图片释放内存

发布时间: 2023-09-06 00:26:08

A. 安卓系统手机如何彻底清理缓存

市面上智能手机,都是内存一定的,有8G、16G、32G,但无论多少,内存总有一天会满,像智能手机那样,安装的应用,会不断产生缓存垃圾,加上一些图片视频,就这点小空间必然会不够用。那么掌握一些内存释放技巧,就显得重要了。

虽然安卓2.2系统开始已经支持Apps2SD功能,但是很多用户使用后发现安卓2.2系统下仍然有很多应用程序无法安装到SD卡,即可程序支持移动到SD卡,但是还会保留一部分系统文件和隐私文件在手机内存里。

另外还有一些程序像Widgets,动态壁纸和一些系统程序,如果安装在SD卡根本无法正常工作,内存不足依然是让很多用户感到棘手的问题。

不过安卓作为一种优秀的移动操作系统,提供了几种可以手机清理和释放内存空间的办法,我们总结了下面几点希望可以帮助用户解决燃眉之急。

一、删除那些你从来不用或者很少使用的应用程序

这是很多用户都会面对的问题,默默忍受着手机内存不足的报警,甚至牺牲系统性能,就是舍不得删除那些从来不用或者极少使用的应用程序,这可能也是一种强迫症。

删除这些程序你会发现手机从此海阔天空,而且你没有任何损失。

二、移动所有可以移动的应用程序数据到SD卡

Android 2.2以上的系统的'支持安装应用程序到SD卡,确保检查所有你安装的应用程序如果支持apps to SD卡功能一定要移动到SD卡,对于一些大型软件特别是游戏程序节省的容量相当可观。

不过一定要注意Widgets程序,捆绑Widgets的程序,以及动态壁纸程序和那些需要在后台运行并且和系统进行交互的应用程序不要移动到SD卡存储,否则程序可能无法正常工作。

如果觉得每个程序单独设置太麻烦,可以借助Apps 2 SD和SDMove这样的程序简化。

对于那些动手能力比较强的用户可以通过网上的教程设置应用程序默认安装到SD卡,这样就可以一劳永逸。

三、清理大型应用程序的缓存数据

1、通过清理程序的缓存文件,释放的内存空间会让你喜出望外

2、进入手机设置选项,选择 设置>应用程序 >管理应用程序

3、按一下Menu键,选择“按大小排序”选项(如果是Android 2.2手机先要选择已下载标签),然后就可以 按照应用程序大小排列所有手机安装的应用程序

4、点击一款列表中的应用程序,如果程序有缓存文件可以显示大小,直接点击“清除缓存”选项就可以释放这些缓存文件占据的空间

5、有一些应用程序的缓存文件可能多达数MB,比如Google Maps,Market,浏览器和相册程序,清理手机这几个程序的缓存文件就可以释放相当可观的空间。

6、很多手机厂商都在旗下手机预装了自己开发的UI程序,比如HTC Sense,MOTOBLUR等,如果你打算使用LaunherPro或者ADW这样的launcher程序替代HTC Sense,你可以清理甚至删除HTC Sense的数据文件,这个操作可以让你的手机多出几十MB空间。

7、另外Android Market还提供一些自动清除缓存文件的应用程序,比如Quick App Clean Cache这款收费软件。

8、对于已经取得root权限的手机用户,可以从Market下载 CacheCleaner, CacheMate和MoveCache这些程序来快速方便的清除程序缓存文件。

B. Android 高效内存-图片内存使用优化

内容整理自网络。

在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用。而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用可以带来直接的效果。本文就简单介绍一张图片到底占用多少内存,我们先假设我们有一张图片时** 600 * 800** 的,图片占用空间大小假设是** 100KB**。

图片内存大小跟占用空间大小有什么关系?

占用空间的大小不是图片占用内存的大小,一些初学者可能会误解一下。占用空间是在磁盘上占用的空间,内存大小是加载到内存中占用的内存大小。两个只是单位是一样的,本质不是一个概念。

一张图片到底占用多少内存呢?(ARGB_8888编码)

1. 图片占用内存的计算公式: 图片高度 * 图片宽度 * 一个像素占用的内存大小

2. 所以上面的图片占用内存是:**800 * 600 * 4 byte = 1875KB = 1.83M **

上面的计算公式中,为什么是4byte呢?文章后面有总结哦

图片所在目录对内存的影响?

在Android中,图片的存放目录和手机的屏幕密度影响图片最终的大小,举个例子:

假设我们的图片放到 xhdpi 目录下,那么我们本文中的图片占用的内存大小如下:

屏幕密度为2的设备:800 * 600 * 4byte = 1.83M

屏幕密度为3的设备:800 * 1.5 * 600 * 1.5 * 4byte = 1.83 * 2.25M =** 4.12M**

所以,计算图片占用内存大小的时候,要考虑图片所在的目录跟设备密度,这两个因素其实影响的是图片的高宽,android会对图片进行拉升跟压缩

总结

1. 图片确实很占用内存,内存优化先考虑图片内存占用;

2. 一定要避免使用大图片,这就是.9图很有用的原因之一;

3. 图片的大小对内存的影响是正比关系;

4. 本文只是简单的告知读者怎么计算图片的内存大小。

大图: 440 * 336    小图: 220 * 168 资源目录: xhdpi

小图的高宽都是大图的1/2-->小图是原图的1/4

界面效果:

测试设备: Coolpad   8676-M01   5.1   density=2.0

测试前准备操作: 同一款设备,设置图片前后多次调用gc直到内存短时间内保持稳定不再变化

内存使用情况: 下图依次是 初始内存,大图内存,小图内存

大图占用内存: 11.23 MB - 10.66 MB = 0.57 MB

小图占用内存: 10.81 MB - 10.66 MB = 0.15 MB

大图小图内存关系: 0.15 MB * 4 = 0.60 MB 约等于 0.57 MB (这是统计工具的误差,理论上就是相等的)

同样的方式在另外一台设备小米4c上得到的结果如下:

测试设备: Xiaomi   Mi-4c   V8.2.1.0.LXKCNDL   5.1.1   density=3.0

大图占用内存: 13.22 MB - 11.95 MB = 1.27 MB

小图占用内存: 12.27 MB - 11.95 MB = 0.32 MB

大图小图内存关系: 0.32 MB * 4 = 1.28 MB 约等于 1.27 MB

结论: 由此可见大图比小图占用更多的内存,图片大小(分辨率)与占用内存成正比关系

备注: 图片在硬盘上占用的磁盘空间大小,与在内存中占用的内存大小完全不一样,不是一个概念,不要混淆

根据上文中图片大小与内存的关系,可以更加深刻的理解Android中.9图片的作用,它不但能减少apk的体积,还能减少图片占用内存。

有些时候我们根本不需要图片,而是自己绘制背景,可以在自定义View的onDraw中绘制背景,当然最方便的还是使用系统的Drawable,绘制部分交给系统去完成。

下面测试图片与Drawable的内存占用对比

原始图片大小: 482 * 482

界面效果:

测试设备: Xiaomi   Mi-4c   V8.2.1.0.LXKCNDL   5.1.1

测试前准备操作: 同一款设备,设置背景前后多次调用gc直到内存短时间内保持稳定不再变化

内存使用情况: 下图依次是 初始内存,使用图片占用的内存,使用Drawable占用的内存,使用onDraw绘制占用的内存

使用图片占用内存: 13.97 MB - 11.97 MB = 2.00 MB

使用Drawable占用内存: 11.97 MB - 11.97 MB = 0.00 MB (不会是0,有误差,只是很少)

使用onDraw绘制占用内存: 11.98 MB - 11.97 MB = 0.01 MB

结论: 绘制背景,或者使用系统提供Drawable作为背景,会大大减少内存占用

Drawable参考资料:

Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

Android GradientDrawable(shape标签定义)静态使用和动态使用(圆角,渐变实现)

“让你的图片最小化”一节中描述的方法:使用尽可能小的图,使用.9,自己绘制背景或者使用Drawable来绘制背景

加载大图片时需要对图片进行压缩,使用等比例压缩方法直接在内存中处理图片

这样做要注意的是,图片质量会变差,inSampleSize设置的值越大,图片质量就越差。

有时候我们取得一张图片,也许只是为了获得这个图片的一些信息,比如图片的width、height等信息,不需要显示到界面上,这个时候我们可以不把图片加载到内存中。

由于Android外层是使用java,而底层使用的是C语言为图片对象分配的内存空间。所以我们的外部虽然看起来释放了,但里层却并不一定完全释放了,我们使用完图片后最好再释放掉里层的内存空间。

RGB(ARGB)

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。在Android中还有包含透明度Alpha的颜色模型,即ARGB。

YUV

YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

YUV的原理是把亮度与色度分离,研究证明,人眼对亮度的敏感超过色度。利用这个原理,可以把色度信息减少一点,人眼也无法查觉这一点。

主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题

YUV的存储中与RGB格式最大不同在于,RGB格式每个点的数据是连继保存在一起的。即R,G,B是前后不间隔的保存在2-4byte空间中。而YUV的数据中为了节约空间,U,V分量空间会减小。每一个点的Y分量独立保存,但连续几个点的U,V分量是保存在一起的,(反正人眼一般也看不出区别).这几个点合起来称为macro-pixel, 这种存储格式称为Packed格式。另外一种存储格式是把一幅图像中Y,U,V分别用三个独立的数组表示。这种模式称为planar模式。

CMYK
  CMYK也称作印刷色彩模式,顾名思义就是用来印刷的。印刷四分色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:

CMYK和RGB相比有一个很大的不同:RGB模式是一种发光的色彩模式,你在一间黑暗的房间内仍然可以看见屏幕上的内容;CMYK是一种依靠反光的色彩模式,我们是怎样阅读报纸的内容呢?是由阳光或灯光照射到报纸上,再反射到我们的眼中,才看到内容。它需要有外界光源,如果你在黑暗房间内是无法阅读报纸的。只要是在印刷品上看到的图像,就是CMYK模式表现的。比如期刊、杂志、报纸、宣传画等,都是印刷出来的,那么就是CMYK模式的了。

CMYK原色与叠加之后的颜色对比

在不考虑透明度的情况下,一个像素点的颜色值在计算机中的表示方法有以下3种:

在Java中,float类型的变量占32位,int类型的变量占32位,short和char类型的变量都在16位,因此可以看出,用浮点数表示法编码一个像素的颜色,内存占用量是96位即12字节;而用24位整数表示法编码,只要一个int类型变量,占用4个字节(高8位空着,低24位用于表示颜色);用16位整数表示法编码,只要一个short类型变量,占2个字节;因此可以看出采用整数表示法编码颜色值,可以大大节省内存,当然,颜色质量也会相对低一些。在Android中获取Bitmap的时候一般也采用整型编码。

回想一下Android的BitmapConfig类中,有ARGB_8888、ARGB_4444、RGB565等常量,现在可以知道它们分别代表了什么含义。同时也可以计算一张图片在内存中可能占用的大小,比如采用ARGB_8888编码载入一张1920 1200的图片,大概就会占用1920 1200*4/1024/1024=8.79MB的内存。

采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;

1920 1200的图片:*

ARGB_8888:1920 1200 4/1024/1024=8.79MB

ARGB_4444,RGB565:1920 1200 2/1024/1024=4.39MB

在Android中,对图片的使用一定要关注,大多数情况下,占用内存多,OOM发生都是因为图片资源使用不当。不要盲目加一个大图到Android项目中,能使用.9进来使用,而且.9图本身尽可能小,另外能使用绘制实现就不要加一个图片资源。有些时候,在不影响用户体验的情况下,可以降低图片素材质量,比如不需要透明度的就不要了,有些透明度用肉眼看不出来。

C. 在android开发中加载的图片太大,有好几十兆,应该怎么办

如果图片太大会造成OOM内存溢出的错误,需要用Bitmap的压缩机制。
解决方案:
1.使用BitmapFactory.decodeStream替代createBitmap方法
原因是该方法直读取图片字节,调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap。

2.使用压缩读取技术
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageSdUri, options);
final int height = options.outHeight;
final int width = options.outWidth;
options.inSampleSize = 1;
int w = 320;
int h = 480;
h = w*height/width;//计算出宽高等比率
int a = options.outWidth/ w;
int b = options.outHeight / h;
options.inSampleSize = Math.max(a, b);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(imageSdUri, options);

3.及时释放Bitamp
Bitmap对象在不使用时,我们应该先调用recycle()释放内存,然后才它设置为null.虽然recycle()从源码上看,调用它应该能立即释放Bitmap的主要内存,但是测试结果显示它并没能立即释放内存。但是我它应该还是能大大的加速Bitmap的主要内存的释放。

D. 安卓手机的内存不足如何清理

安卓手机内存不足怎么清理?很多时候,大家在使用手机安装软件或者其他操作时会出现手机内存不足。如果大家遇到这种问题该如何处理呢?下面,我就给大家讲解一下安卓手机内存不足怎么清理?希望能对大家有所帮助!

1)长按手机Home键,会弹出显示手机正在后台运行的软件,拖动去除或者点击下方按键清理掉不需要后台运行的软件。

2)打开系统管理软件,这里以360手机卫士为例。点击“需要大扫除了”(旧版名称为手机清理),进去后点击“一键清理”,或者也可在“内存优化”里手动清理内存,以及“垃圾清理”里的垃圾文件。

华为手机

1、以华为手机为例,进入设置界面找到存储管理。

2、进入后我们看到存储使用状态,先来对比一下清理前手机存储情况,这里的多媒体文件就不说了,平时清理都是清理多媒体文件,这里有两处地方占用最大,应用程序和其他两个地方。

3、回到设置界面,选择应用和通知。

4、选择应用管理。

5、来到程序管理界面,随便找一个程序点击。

6、点击存储。

7、我们看到占用内存62M,点击清理,这里清理后程序就恢复到最初安装状态,需要重新输入账户和密码。比如淘宝火山小视频等等这些数据占用相当大,我们根据自己的手机程序进行逐个删除数据。

8、我们再回到存储管理界面,看看应用程序已经降到15G左右,还有其他占用基本没变,这里的其他占用是安卓系统生成的,不懂系统不能乱删,没有ROOT也删除不了,所以要想删除其他空间,只能恢复出厂设置。

拓展:

安卓手机内存总是不够用的解决方法一

1、可以下载个网络或360的手机助手,用它的内存清理功能。一键清理,很方便;

2、不常用的软件不要常驻内存,打开后按退出关掉,不要直接切换到主屏幕,这样程序还是占用内存的;

3、利用助手类管理软件,将不要的自启动软件都禁止;

4、如果还是提示内存不足,则可能是你的手机档次太低,内存过小,现在一般的主流安卓机都是2G的运行内存了,如果你的手机低于1G就太差了,要尽量避免同时打开多个程序。

安卓手机内存总是不够用的`解决方法二

很多手机都已经有安装到内存卡的功能了,大部分2.2操作系统以上的都可以自己选择,如果不能选择的话,就用电脑直接安到内存卡中即可。

点击右上角的设置按钮。

第二步,更改安装目录,将程序安装到内存卡。

进入设置后,选择安装文件一栏,然后选择优先将程序安装到没存卡。

清除手机内多余的系统程序。

获取root权限,获取权限的方法有很多,我们可以到各大论坛进行学习,里面教程有很多。因为不同的手机有不同的方法,不能一概而论,所以这里就不在介绍root的方法了。

热点内容
c语言的认识 发布:2025-02-01 11:58:03 浏览:520
svn连接服务器地址 发布:2025-02-01 11:51:31 浏览:416
对源程序为什么要编译 发布:2025-02-01 11:47:46 浏览:218
sql表添加记录 发布:2025-02-01 11:22:08 浏览:864
word编辑加密 发布:2025-02-01 11:18:53 浏览:571
php变量文本 发布:2025-02-01 11:10:46 浏览:426
音悦台上传mv 发布:2025-02-01 11:05:02 浏览:516
微信如何设置访问限制 发布:2025-02-01 10:43:06 浏览:335
b站缓存视频下架还有吗 发布:2025-02-01 10:37:52 浏览:940
e卡通初始密码是多少 发布:2025-02-01 10:31:55 浏览:127