下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Android的内存还有另一种获取方法?

作者:课课家教育     来源: http://www.kokojia.com点击数:922发布时间: 2017-02-01 20:45:22

标签: AndroidJava移动开发

  手机开发上的一些问题,我常常觉得我的手机内存上一直都没有内存到底是什么原因,该删除的都删除,该优化的都优化了,那我真不知道问题的原因出在哪里,我们尝试今天高级的运行中看看有没办法呢能够减少手机内存的负担,AndroidiOS不一样不用特意去注册一个账号,那么是不是说明其实我们Android有个共享的内存的存在?

  1.我们要一个框架来实行,Android其实是有一个匿名共享内存的机制,而在内核中我们要区分内存的进程空间的应用,如果想要获得更多的内存我们必须要在ashmem中提交申请,当你的系统内存不足的时候你们是否常常受到一个内存不足,需要清空的提示?我们找到框架memoryfile通过区域内的共享区域不用经过java的进程系统内部的内存共享,实际上是不会占用你手机Java的内存应用。

  2.MemoryFile框架暴露出来的用户接口可以说跟他的名字一样,基本上跟我们平时文件的读写趋于一致,也可以使用输入和流出对其进行读写等操作:

  内存文件内存文件=新的内存文件(null,InputStream,available());

  内存文件。allowpurging(假);

  getoutputstream()OutputStreamOutputStream=内存文件;

  OutputStream写(1024);

  3.当我们调用PIN和UNPIN的时候,memoryfile的框架会自动的标识PIN,在你的内存不足的时候会进行回收,那么你的Android系统就会默认allpurging调用状态下,你的UNPIN的申请内存在一个时间段内是不会在进行读写。

  4.Android的手机主要是java编程的应用技术,那么我们的memoryfile框架很好的运用得上,手机应用难免会出现BUG,我们在这里的很好的避免了Java的读写。

 

  5.那么既然memoryfile的框架不占用于Java的应用中,那么也说明在内存的申请也不用通过dumpsys内存信息下面的代码中我看到了一下的应用图表。在4.4及其以上的系统中,如果在应用中使用了MemoryFile,那么在dumpsysmeminfo的时候,可以看到多了一项Ashmem的值。

memory file

  6.而且这里我也算过,也是不算入NativeHeap中的,另外,这个时候去系统设置里面看进程的内存占用,也可以看出来其实并没有计入app的内存的。

APP内存

  在这个问题上我没有搜到一个对应的问题,或许这是Android的一个特征亦或者是一个小小的bug。

  7.如果是基于Android中读取的文件,我们可以用不算入内存的memoryfile而在全新系统的4.4或更高版本以上的,我们额外偷取一些内存可以不需要计算入APP内存中,用decodebitmap来读取。

  总结:原来我们是通过利用不读取Java的方式来实现偷取APP内存,这样的好处就是这些内存不用读取到Android的Java的文件内,同样也是利用另一种方式存在我们手机内,然而霸占着我们的手机内存,但由于它不经过Java读取,我们无法查找到它的来源,一个memoryfile的原理就这么的实行了。

赞(28)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程