搞安卓的简单开发也有一段时间了。程序算是基本做好了。结果出现了程序崩溃的问题。
终于到了这个时刻了么。
接下来应该就是些系统各方面的问题研究了。
程序崩溃问题,目前我确定为,程序内存占用较大。最后被系统kill掉。因此开始研究内存占用问题。
百度到的一些有用的启发:
假如有三个activity,分别是main,a 和b .
a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过update heap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。
第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。
a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过update heap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。
第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。
作为一个新手,总是在调用程序界面跳转的时候喜欢用
Intent intent = new Intent(MainActivity.this,otherActicity.class);
startActivity(intent);
的简单跳转方法。
因此在反复几次跳转之后。根据百度到的第二个问题的情况。就是内存占用太多了。结果被系统kill掉了。
知道了原因。处理起来应该比较简单。就是想办法把内存释放掉就行了。
另外附加一个小的问题。
调用Toast来做简单的提示的时候。在Toast提示显示出来,还没消失的时候,调用其他的Activity可能会因此程序崩溃。因为我的程序是这样。所以这也是一个程序崩溃之后的思考方向。
关于内存泄漏:
这个百度链接好像还挺有用的,可以看看。
这次的安卓项目做得还是挺失败的。。。主要是为自己定的目标太低了。
内存问题解决方法:
注意一些Bitmap:
MediaPlayer.release(); 释放音乐文件的占用内存。
Database.close();
cursor.close();
还有文件等的close(),避免内存泄漏。
1)查看某个博客说的。建立一个空的view. 然后重写onDestroy方法。 里面setContentView();为这个空的view.
解释:这样改Activity引用的原来的view,会因为没有被引用,被垃圾回收系统回收掉。 不过这个方法在其他的程序里面目前为止基本没见到过。暂不推荐。不过还是有点效果的。
2)重写onDestroy()方法。 在里面将一些想要释放的东西赋值为null。 然后调用一下System.gc();这个垃圾回收的系统。(注意不要太频繁)。