android成长点滴

                                                                                               温故而知新,方可学而用

一:你所知道的名称

1、OOM -- 内存溢出解决方案(OOM)
2、JVM -- java虚拟机
      JVM会在堆内存中为对象分配空间,当一个java对象失去引用时,jvm的垃圾回收机制会自动清除他们并回收内存空间。
java内存管理包括内存分配(创建java对象时)和 内存回收(回收java对象时)

3、Android Studio -- android开发工具

4、强引用: 程序创建一个对象,并把这个对象赋给一个引用变量,这个引用变量就是强引用。

5、软引用(SoftReferece):系统内存不足时会回收, 充足时则不会回收。
      使用情况:当程序需要大量创建某个类的新对象,而且有可能重新访问以创建老对象时  

6、展讯平台MMI    联发科(MTK)


二: 推荐使用的框架

1.、  异步基于回调的HTTP开发包
android-async-http
2、   异步加载缓存图片下载的工具类
android-universal-image-loader
3、  Afinal 是一个android的sqlite orm和ioc框架,并封装了Http框架。

4、Android ViewFlow的使用  gethub上的一个开源项目。 视图切换的效果,当view不确定的时候使用


三: 常用知识

1、 AsyncTask 单个异步操作可选, Handler多个后台任务可选;AsyncTask 使用简介  抽象类 android.os.AsyncTask

定义了三个泛型类型 Params, Progress , Result .
Params 启动任务执行的输入参数, 比如HTTP请求的URL。
Progress 后台任务的百分比
Result 后台执行任务最终返回的结果, 比如String

@使用AsyncTask  一个异步加载数据最少要重新以下两个方法:
doInBackground(Params...)  后台执行,比较耗时的操作都可以放在这里。这里不能直接操作UI, 后台线程执行,完成任务的主要工作,通常需要较长的时间,在执行过程中可以调用PublishProgress(Progress...)来更新任务的进度.
onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
@有必要的话你还得重写以下这三个方法,但不是必须的:
onProgressUpdate(Progress…)   可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。(publishProgress方法触发)
onPreExecute()        这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
onCancelled()             用户调用取消时,要做的操作
@使用AsyncTask类,以下是几条必须遵守的准则:
1。Task的实例必须在UI thread中创建;
2。execute方法必须在UI thread中调用;
3。不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
4。该task只能被执行一次,否则多次调用时将会出现异常;

【使用简化: 1.继承AsyncTask    2.重写doInBackground(Params…) 后台耗时操作,不可直接操作UI  使用publishProgress触发onProgressUpdate回调方法做进度显示,与onPostExecute(Result)得到doInBackground结果直接更新UI .   3. 在UI主线程中实例化Task,并执行execute.且只能执行一次】


2:

 OOM原因:系统资源有限,android设备为单个应用分配的内存仅为16M,一次加载多个图图片,如: listview/GridView/ViewPager
1.手动干涉dalvik的队内存处理效率
private final static float TARGAP_UTILIZATION = 0.75f;
public void onCreate(){
VMRuntime.getRuntime.setTargetHeapUtilization(TARGAP_UTILIZATION);}
2 手动指定Android堆大小
private final static int CWJ_HEAP_SIZE = 0.75f;
public void onCreate(){
VMRuntime.getRuntime.setminimumHeapSize(CWJ_HEAP_SIZE);}
3 手动指定回收内存 指定gc
if(bitmap!=null && !bitmap.isRecycled){
bitmap.recycle();
System.gc();}
4 图片必须进行压缩,不然多半会出现OOM
一.引用没释放造成的内存泄露
二.资源对象没关闭造成的内存泄露(比如没有关闭访问文件的输入输出流)
三.Bitmap没调用recycle(Bitmap对象在不使用时,我们应该先调用recycle()释放内存,然后才它设置为null.)
四.构造Adapter时,没有使用缓存的 convertView
五.一些不良代码成内存压力(一些代码虽然不会直接造成内存泄露,但是它一直占用内存就会影响其他进程访问内存,间接造成OOM)

补充:大量读取图片,比如listview或者相册,读取网络图片时,使用软引用(SoftReference),让系统能够自动的利用内存空间


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值