Android APK开发基础——性能优化之管理应用的内存

第1部分: Android是如何管理内存的

 

1, 何为GC

GC 是 garbage collection 的缩写, 垃圾回收的意思. 也可以是 Garbage Collector, 也就是垃圾回收器。

 

垃圾回收器的职责

垃圾回收器有三大职责:

  1. 分配内存;
  2. 确保任何被引用的对象保留在内存中;
  3. 回收不能通过引用关系找到的对象的内存.

Heap和Stack

简单说下:

  • Heap内存是指java运行环境用来分配给对象和JRE类的内存. 是应用的内存空间.
  • Stack内存是相对于线程Thread而言的, 它保存线程中方法中短期存在的变量值和对Heap中对象的引用等.
  • Stack内存, 顾名思义, 是类Stack方式, 总是后进先出(LIFO)的.
  • 我们通常说的GC的针对Heap内存的. 因为Stack内存相当于是随用随销的.

heap&stack



作者:anly_jun
链接:https://www.jianshu.com/p/5db05db4f5ab
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

 

 

2、独特的进程管理策略

Android是依据一个名为LRU(last recently used最近使用过的程序)列表,将程序进行排序,并结束最早的进程。

 

3、限制应用的内存

为了维持多任务的功能环境,Android为每一个app都设置了一个硬性的heap size限制。准确的heap size限制会因为不同设备的不同RAM大小而各有差异。如果你的app已经到了heap的限制大小并且再尝试分配内存的话,会引起OutOfMemoryError的错误。

在一些情况下,你也许想要查询当前设备的heap size限制大小是多少,然后决定cache的大小。可以通过getMemoryClass()来查询。这个方法会返回一个整数,表明你的应用的heap size限制是多少Mb(megabates)。

 

第2部分: 你的应用该如何管理内存

1) 珍惜Services资源

当一个Service已经不再需要的时候还继续保留它,这对Android应用的内存管理来说是最糟糕的错误之一

为了能够接收到用户离开你的UI时的通知,你需要实现Activtiy类里面的onTrimMemory()、onLowMemory()回调方法。

 

@Override
public void onTrimMemory(int level) {
    // TODO Auto-generated method stub
    Log.d("060_"," onTrimMemory ... level:" + level);

    switch (level) {
        case TRIM_MEMORY_UI_HIDDEN:
            //释放资源
            /*编写释放资源代码*/
            Log.d("060_"," TRIM_MEMORY_UI_HIDDEN" );
            break;
        default:
            break;
    }

    super.onTrimMemory(level);
}

@Override
public void onLowMemory() {
    //do release operation
}

 

 

OnTrimMemory的参数是一个int数值,代表不同的内存状态:

 

TRIM_MEMORY_COMPLETE:内存不足,并且该进程在后台进程列表最后一个,马上就要被清理
TRIM_MEMORY_MODERATE:内存不足,并且该进程在后台进程列表的中部。
TRIM_MEMORY_BACKGROUND:内存不足,并且该进程是后台进程。
TRIM_MEMORY_UI_HIDDEN:内存不足,并且该进程的UI已经不可见了。 
以上4个是4.0增加
TRIM_MEMORY_RUNNING_CRITICAL:内存不足(后台进程不足3个),并且该进程优先级比较高,需要清理内存
TRIM_MEMORY_RUNNING_LOW:内存不足(后台进程不足5个),并且该进程优先级比较高,需要清理内存
TRIM_MEMORY_RUNNING_MODERATE:内存不足(后台进程超过5个),并且该进程优先级比较高,需要清理内存 
以上3个是4.1增加

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值