以前有看到一篇文章说, 可以向系统申请更多内存, 但我现在找不到了, 麻烦知道的人告诉我一下。
- Java code
private int[] arr = new int[4 * 1024 * 1024];
在Activity1定义这样一个数组,结束Activity1跳到Activity2
然后结束Activity2跳到Activity1。如果是模拟器或中兴的V880之类的,基本上就会OutOfMemoryError了。
我是专门写了这个简单的测试程序,所以不必怀疑有Cursor没有关闭、泄露”了Context之类的问题。
用正点工具箱的任务管理,发现Activity1结束后(指finish();谁能说下有没更好的结束方法?),arr内存并没有释放掉。
于是我猜测当第二次进入Activity1的一瞬间,将需要双倍arr大小的内存,而导致OutOfMemoryError。
总之呢我需要彻底释放掉一个Activity的资源的方法……
------解决方案--------------------
------解决方案--------------------
你重写finish方法然后手动调用一下GC。看可以吗。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
期待更好的解决思路或者是方案
------解决方案--------------------
楼主是想释放资源,还是想分配内存呢。
如果释放资源,为什么要注释arr = null,同时你的gc的位置也不对。
arr分配空间是在activity1类实例创建的时候,oncreate所做的事情是在创建完成之后的动作。
最好的办法就是在onDestroy里面强制释放。
arr = null;
System.gc();
如果你想单纯的分配内存,如果手机允许,使用
VMRuntime.getRuntime().setMinimumHeapSize(8 * 1024 * 1024);
------解决方案--------------------
这个得看你的android系统配置的最大heapsize了
可以通过
getprop dalvik.vm.heapsize得到最大heapsize。
如果没有得到,那么最大heapsize就只有默认的,这是16M。
一般虚拟机起来,就要占用5M左右的memory吧, 自己估计一下你能handle的memory是多少,要出去系统开销
------解决方案--------------------
------解决方案--------------------
又是没有源代码的情况,自己下载 MAT 工具分析吧
------解决方案--------------------
下载 MAT 工具,分析一下吧
------解决方案--------------------
------解决方案--------------------