Android手机开发之图片内存优化几点
1、将图片转化为缩略图再加载:
代码如下 | 复制代码 |
1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inSampleSize = 2; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); |
该段代码即是读取1.png的缩略图,长度、宽度都只有原图片的1/2。图片大小减少,占用的内存自然也变小了。这么做的弊端是图片质量变差,inSampleSize的值越大,图片的质量就越差。由于各手机厂商缩放图片的算法不同,在不同手机上的缩放图片质量可能会不同。笔者就遭遇过moto手机上图片缩放后质量可以接受,三星手机上同样的缩放比例,质量却差很多的情况。
2、用ARBG_4444颜色模式加载图片:
Android中有四种,分别是:
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存
RGB_565:每个像素占用2byte内存
Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。
代码如下 | 复制代码 |
1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inPreferredConfig = Bitmap.Config.ARGB_4444; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); |
以上代码即是将1.png以ARGB_4444模式读出。内存减少虽然不如第一种方法明显,但是对于大多数图片,看不出与ARGB_8888模式有什么差别。不过在读取有渐变效果的图片时,可能有颜色条出现。另外,会影响图片的特效处理。
3、调用图片的recycle()方法:
这个其实不是真正降低图片内存的方法。主要目的是标记图片对象,方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大,而且与程序Java部分的内存是分开计算的。所以经常出现Java heap足够使用,而图片发生OutOfMemoryError的情况。在图片不使用时调用该方法,可以有效降低图片本地数据的峰值,从而减少OutOfMemoryError的概率。不过调用了recycle()的图片对象处于“废弃”状态,调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下,不建议使用该方法。特别要注意已经用setImageBitmap(Bitmap img)方法分配给控件的图片对象,可能会被系统类库调用,造成程序错误。
4、使用Matrix对象放大的图片如何更改颜色模式:
虽然使用Matrix对象放大图片,必定会耗费更多的内存,但有时候也不得不这样做。放大后的图片使用的ARGB_8888颜色模式,就算原图片是ARGB_4444颜色模式也一样,而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。
代码如下 | 复制代码 |
Matrix matrix = new Matrix(); float newWidth = 200;//图片放大后的宽度 float newHeight = 300;//图片放大后的长度 matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight()); Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的图片 img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444颜色模式的图片 img = null; img1 = null; |
这里比起原来的图片额外生成了一个图片对象img1。但是系统会自动回收img1,所以实际内存还是减少了。
现在Android系统刷新是常见的事情,但是经常因为刷新使用手机变铁的,下面我们来解决一个问题安卓手机刷机后无信号的解决方法
解决方法:
没信号,激活问题:
菜单左键---》常规设置---》无线和网络设置---》移动网络设置---》CDMA订阅(切换到RUIM/SIM模式),然后把手机切换到飞行模式,最后切换飞行模式,即可激活
出现漫游符:进入RE管理器,找到system——app——找到stk.apk安装即可
彩信问题:
"打开apn设置,因为大多选择的接入点是ctnet,所以打开ctnet设置,设置如下:
在MMSC里面写:http://mmsc.vent.mobi 彩信代理写:10.0.0.200 彩信端口选:80
这就为ctnet设置了彩信代理,就可以使选择ctnet联网方式照常接收彩信
卡在开机画面:
一般卡在开机画面都是由于没有进行双清操作,你可以试着在每次刷机前进行双清
如果上面方法还是不行,大家自有再刷一次机了哦。
修改Android手机的hosts地址,需要对手机root,因为要修改system目录下的文件,文章最后面我们讲述了获取hosts列表的做法.第一步:使用adb下载手机端的hosts文件,在Windows下打开命令提示行,切换到C:目录下。
C:>adb pull /system/etc/hosts
这样,便将手机端的hosts文件下载到Windows的C盘根目录下,先不要关闭命令提示行窗口。
第二步:复制https://smarthosts.googlecode.com/svn/trunk/hosts页面的所有内容,推荐使用notepad++打开下载回来的hosts文件,然后将内容粘贴到hosts文件中,保存。
第三步:在手机端打开rootexplorer,我想使用Android并且root过的手机都会有rootexplorer吧,打开后进入system目录,将权限更改为可读写。
第四步:切回到命令提示行窗口输入如下内容将hosts文件回传到手机中。
C:>adb push hosts /system/etc/
这里再介绍一下 如何获取hosts列表呢?
https://smarthosts.googlecode.com/svn/trunk/hosts
通过上面这个地址,本来这是一个开源项目,叫做smarthosts,但是已经出于某种原因停止更新了。
该程序也可以修改电脑上的hosts地址。
因为之前做了个安卓壁纸站所以我们突然想起了安卓手机开发了,下面来看我的安卓环境配置文章吧。
这次接触安卓环境,一切都很陌生;花了一个下午的时间,走了很多弯路,不过最终还是把环境搭成了。下面总结一下搭建步骤:
1.启动 ,创建一个Android项目:helloandroid。添加一个类“HelloAndroid”,源码如下
代码如下 | 复制代码 |
package com.example.helloandroid; |
2.点击 按钮,在Run Configuration对话框中双击android application,进行如下设置:
(注:真机调试模式请选择红色圈框的选项,AVD调试器请选择下边的仿真设备。)
我用的是真机,所以会自动出现如下对话框,选择我的设备
单击OK,我的手机屏幕已经可以看到“Hello,word”了,你的呢?
代码如下 | 复制代码 |
/创建电话管理 //获取手机号码
<!-- 添加权限 --> |
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 这篇文章主要介绍了浅谈redis key值内存消耗以及性能影响,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-07
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 这篇文章主要介绍了详解分析MySQL8.0的内存消耗,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下...2021-03-23
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 这篇文章主要介绍了解决使用OpenCV中的imread()内存报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20