设为首页 加入收藏

TOP

Android怎样才能完全退出程序
2014-11-24 01:09:16 来源: 作者: 【 】 浏览:3
Tags:Android 怎样 才能 完全 退出 程序

首先说下写这篇博客前的经历,在最近项目中遇到一个非常常见(蛋疼)的问题——OOM,大家都知道OOM的问题主要是加载的图片过多时还有就是引用context没有释放造成的。通过MAT监测,各种分析还是没有看出什么头绪,试着把项目中有可能引用Context的地方都修改了一边,悲剧的是问题依旧在。之所以没有怀疑是图片过多引起的,是因为用的Android-Universal-Image-Loader ,一个比较稳定的加载图片的开源项目。后来根据MAT分析问题一直和UIL有关联,实在没办法死马当活马医,换成了xUtils快速开发框架,最初源于Afinal框架。替换完之后,怀着忐忑的心情测试,十分钟、半小时、OOM没有出现(窃喜),以为问题到此完美解决,继续操作蛋疼的OOM又回来,简直阴魂不散啊。愤怒,气愤,受打击。先不管它了


下面进入本帖主题,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();
}
activityStack.add(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}


这就是主要代码,顺便奉上demo一份以供参考


具体下载目录在 /2014年资料/2月/21日/Android怎样才能完全退出程序


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何在Eclipse中查看Android源代码 下一篇Linux下PCI设备驱动程序之注册详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: