Android手机开发之图片内存优化几点

 更新时间:2016年9月20日 20:00  点击:2328
本文章来介绍一下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地址。

本文章来介绍一下关于安卓(android)手机开发之环境搭建 HelloWord,有需要学习android手机开的朋友可以参考一下。

因为之前做了个安卓壁纸站所以我们突然想起了安卓手机开发了,下面来看我的安卓环境配置文章吧。

这次接触安卓环境,一切都很陌生;花了一个下午的时间,走了很多弯路,不过最终还是把环境搭成了。下面总结一下搭建步骤:

第一步:安装Java SDK
本文环境所用的Jdk“jdk-6u25-windows-i586.exe”,下载地址读者可以自行到Oracle官方网站上下载最新的安装程序。(参考地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html)。安装步骤就不再详细叙述了,这个说多了无意义。image
第二步:安装eclipse
本文使用的Eclipse是“eclipse-jee-indigo-SR2-win32.zip”,读者需要自行下载,文件大小212MB左右。image
第三步:安装android-sdk
官方参考文档(E文):http://developer.android.com/sdk/installing.html
首先下载回来安装包“android-sdk_r17-windows.zip”,image 将其解压到D:Program Filesandroid-sdk-windows目录。
第四步:安装安卓ADT
同样从http://developer.android.com下载回来for windows Eclipse Plugin的SDK“ADT-17.0.0.zip”安装包,最新的版本可能会比这个要新。直接覆盖到Eclipse安装程序的根目录下即可。image
第五步:联机更新下载安卓SDK库
首先打开image ,打开之后下图所示:image 。选择一个特定版本的SDK下载回来。根据您的网速可能需要等上3分到几个小时不等,比如我的网速比较慢,下载了2个多小时。我选择的安卓版本是image ,单击install packages开始联机
下载安装。
第六步:创建AVD
注:拥有android系统 手机的同学可以直接跳过了,直接看第七步吧(AVD非常耗CPU,我表示实在受不了了)。
AVD是什么玩意呢?“安卓仿真设备”,就是这个小机器人image ,打开之后选择“NEW”image 创建一个安卓仿真设备,什么是仿真设备呢?其实就是一个安卓手机模拟器。输入仿真设备名称和平台以及CPU类型,然后就可以创建了。如图:image
第七步:安卓手机(真机)安装
1.首先你需要到你的手机官网上下载一个合适的USB的驱动程序,比我的是Lenovo A500 我就直接用“豌豆荚”全自动将驱动程序安装好了。(此步骤必备,否则PC无法识别到你的设备,也就无法连接到USB调试模式)
2.在你的手机中打开以下开关:系统设置-->应用程序-->开发-->USB调试。选中它。
第八步:创建第一个AndRoid项目:HelloWord

1.启动image ,创建一个Android项目:helloandroid。添加一个类“HelloAndroid”,源码如下

 代码如下 复制代码

 package com.example.helloandroid;
 import android.app.Activity;
import android.os.Bundle;
 import android.widget.*;
public class HelloAndroid extends Activity { 
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
 tv.setText("Hello, Android");
setContentView(tv);
 }
}

2.点击image 按钮,在Run Configuration对话框中双击android application,进行如下设置:

image image (注:真机调试模式请选择红色圈框的选项,AVD调试器请选择下边的仿真设备。)

我用的是真机,所以会自动出现如下对话框,选择我的设备image

单击OK,我的手机屏幕已经可以看到“Hello,word”了,你的呢?

本文章分享一篇关于android手机开发之获取客户端手机号码程序有需要了朋友可以看看。
 代码如下 复制代码

/创建电话管理
           TelephonyManager tm = (TelephonyManager)
  //与手机建立连接
          StartActivity.this.getSystemService(Context.TELEPHONY_SERVICE);

  //获取手机号码
     String phoneNo=tm.getLine1Number();    

 

<!-- 添加权限 -->
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • 浅谈redis key值内存消耗以及性能影响

    这篇文章主要介绍了浅谈redis key值内存消耗以及性能影响,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-07
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 详解分析MySQL8.0的内存消耗

    这篇文章主要介绍了详解分析MySQL8.0的内存消耗,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下...2021-03-23
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    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 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • 解决使用OpenCV中的imread()内存报错问题

    这篇文章主要介绍了解决使用OpenCV中的imread()内存报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20