Android开发笔记之内存问题。

来源:互联网 发布:linux的tmp目录 编辑:程序博客网 时间:2024/06/06 10:02
搞安卓的简单开发也有一段时间了。程序算是基本做好了。结果出现了程序崩溃的问题。

终于到了这个时刻了么。Android开发笔记之内存问题。

接下来应该就是些系统各方面的问题研究了。

程序崩溃问题,目前我确定为,程序内存占用较大。最后被系统kill掉。因此开始研究内存占用问题。

百度到的一些有用的启发:

假如有三个activity,分别是main,a 和b . 
a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过updateheap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。 
第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。

作为一个新手,总是在调用程序界面跳转的时候喜欢用
Intent intent = newIntent(MainActivity.this,otherActicity.class);
startActivity(intent);
的简单跳转方法。

因此在反复几次跳转之后。根据百度到的第二个问题的情况。就是内存占用太多了。结果被系统kill掉了。

知道了原因。处理起来应该比较简单。就是想办法把内存释放掉就行了。


另外附加一个小的问题。

调用Toast来做简单的提示的时候。在Toast提示显示出来,还没消失的时候,调用其他的Activity可能会因此程序崩溃。因为我的程序是这样。所以这也是一个程序崩溃之后的思考方向。

关于内存泄漏:
http://www.cnblogs.com/kingOfPointer/archive/2012/12/21/2828018.html
这个百度链接好像还挺有用的,可以看看。

 

这次的安卓项目做得还是挺失败的。。。主要是为自己定的目标太低了。

 

内存问题解决方法:

注意一些Bitmap:

 recycle();如果这个bitmap依然被引用的话,这样做相当于清除bitmap了。用到的时候会报错的哦。

MediaPlayer.release(); 释放音乐文件的占用内存。

Database.close();

cursor.close();

还有文件等的close(),避免内存泄漏。

1)查看某个博客说的。建立一个空的view. 然后重写onDestroy方法。里面setContentView();为这个空的view.

解释:这样改Activity引用的原来的view,会因为没有被引用,被垃圾回收系统回收掉。不过这个方法在其他的程序里面目前为止基本没见到过。暂不推荐。不过还是有点效果的。

 

2)重写onDestroy()方法。 在里面将一些想要释放的东西赋值为null。然后调用一下System.gc();这个垃圾回收的系统。(注意不要太频繁)。 程序最终采用的是这种方法。运行的很好。

 

 
0 0
原创粉丝点击