Android怎样才能完全退出程序
2013-12-15 21:43
225 查看
首先说下写这篇博客前的经历,在最近项目中遇到一个非常常见(蛋疼)的问题——OOM,大家都知道OOM的问题主要是加载的图片过多时还有就是引用context没有释放造成的。通过MAT监测,各种分析还是没有看出什么头绪,试着把项目中有可能引用Context的地方都修改了一边,悲剧的是问题依旧在。之所以没有怀疑是图片过多引起的,是因为用的Android-Universal-Image-Loader
,一个比较稳定的加载图片的开源项目。后来根据MAT分析问题一直和UIL有关联,实在没办法死马当活马医,换成了xUtils快速开发框架,最初源于Afinal框架。替换完之后,怀着忐忑的心情测试,十分钟、半小时、OOM没有出现(窃喜),以为问题到此完美解决,继续操作蛋疼的OOM又回来,简直阴魂不散啊。愤怒,气愤,受打击。先不管它了
几天后,心情平静,仔细想想还是要把它解决掉,谁叫咱是完美主义者呢。继续google、百度发现Android Memory Management,MAT的用法介绍的比较详细。最终发现罪魁祸首还是Context没有释放,导致垃圾无法回收引起的。
下面进入本帖主题,android程序退出的方法很多,不过不在本帖讨论范围之内。我采取的方法是把每个打开的activity放进Stack集合,activity关闭时从Stack集合移除。这也是OOM的根源所在,只是把activity加入到Stack中,而没有移除,就导致了Stack保持了Context引用,虽然activity关闭但是资源没有释放,导致没办法回收。具体解决办法见代码,在onCreate方法中添加的栈中,在onDestroy方法中移除
这就是主要代码,顺便奉上demo一份以供参考
,一个比较稳定的加载图片的开源项目。后来根据MAT分析问题一直和UIL有关联,实在没办法死马当活马医,换成了xUtils快速开发框架,最初源于Afinal框架。替换完之后,怀着忐忑的心情测试,十分钟、半小时、OOM没有出现(窃喜),以为问题到此完美解决,继续操作蛋疼的OOM又回来,简直阴魂不散啊。愤怒,气愤,受打击。先不管它了
几天后,心情平静,仔细想想还是要把它解决掉,谁叫咱是完美主义者呢。继续google、百度发现Android Memory Management,MAT的用法介绍的比较详细。最终发现罪魁祸首还是Context没有释放,导致垃圾无法回收引起的。
下面进入本帖主题,android程序退出的方法很多,不过不在本帖讨论范围之内。我采取的方法是把每个打开的activity放进Stack集合,activity关闭时从Stack集合移除。这也是OOM的根源所在,只是把activity加入到Stack中,而没有移除,就导致了Stack保持了Context引用,虽然activity关闭但是资源没有释放,导致没办法回收。具体解决办法见代码,在onCreate方法中添加的栈中,在onDestroy方法中移除
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); appManager = AppManager.getAppManager(); // 把当前activity加入栈中 appManager.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); // activity关闭,从栈中移除 appManager.finishActivity(this); } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } }
这就是主要代码,顺便奉上demo一份以供参考
相关文章推荐
- Android 完全退出程序方法
- Android中退出程序的提示框及完全退出
- Android完全退出程序Intent.FLAG_ACTIVITY_CLEAR_TASK无效
- Android应用完全退出程序的方法!!!
- android完全退出程序
- android 完全退出程序
- Android程序完全退出的三种方法
- Android程序完全退出的三种方法
- Android开发中完全退出程序的三种方法
- 完全退出android程序的方法
- Android完全退出多个activity程序
- android中完全退出程序的四种办法
- Android程序完全退出的三種方法
- android完全退出程序的几种方式
- android完全退出程序 (所有版本通用)
- android程序完全退出
- Android下两次返回键完全退出程序以及提示对话框的实现
- Android程序完全退出
- Android程序完全退出的三种方法
- Android开发中完全退出程序