比较奇怪android没有给出一个统一的退出接口,网上查了很多材料也出现了一些错误,在此记录一下,遇到的,与总结的。

1、常见概念,方法

finish()

通知结束当前activity实例,finish后会调用onDestroy() 但是并没有马山释放该activity实例,只是标记可以释放,并且从back statck中移除,具体何时释放内存是由gc自动判断释放。

system.exit(0)

这个方法表面上看是结束退出,实际使用时也是退出当前的activity而已。内存应该是立马释放了,没有测过。调用exit(0) 会黑屏一会。

2、list退出方案bug

杀进程无效,用 List<Activity> activityList 在每个activity的oncreat方法里 activityList.add(this); 退出时用一个循环全部finish是可以退出的。

但是实际项目中内存泄露了。开始的时候内存泄露非常郁闷,因为接触java不久,一直以为这语言是自动释放内存的,但是事实上并没有想像中那么智能还不如c++直接全部都让编程者自己来。最后用MAT( Memory Analyzer tool )内存查询工具定位到内存泄露是发生在 List<Activity> activityList 上才想到。是这个list把各个activity钳位住了,释放不了。

为了逻辑上的清晰。阐述下项目应用,底部一个导航栏四个图标,两个主界面,一个设置,一个后退。两个主要界面及子界面不断切换后内存泄露卡死。用DDMS 的update heap 查看到内存一直增长没有稳定在一个区间。手动点cause gc 后内存无法降低,查了好久。

3、加载方式与Intent.Flag

介于list方式会内存溢出,换成Stack activityStack;  手动控制进栈出栈,应该是可以,会太麻烦了,和自己手动finish就一样了。以为开始的时候内存泄露不懂用mat 查泄露。参考了很多办法,阅读了一些材料。

查阅到了android的加载4总加载模式。http://blog.csdn.net/wangshione/article/details/8491098

a、默认是standard:每次new intent。start 跳转都会生成一个新的activity 实例

b、singleTop:本身在栈顶则 调用onNewIntent()

c、singleTask:第一次正常添加到A位置,第二次再添加时比如是A++b位置,清空栈A后的所有实例。不重新创建自己而是调用onNewIntent()

d、singleInstance: 单例单栈模式,新建一个栈给改instance 不重新创建自己而是调用onNewIntent();
点击back没有该实例

FLAG_ACTIVITY_CLEAR_TOP: 第一次正常添加到A位置,第二次再添加时比如是A++b位置,清空栈A后的所有实例。先杀死原来的自己,在onCreat自己。

FLAG_ACTIVITY_NEW_TASK:实例放入新栈

4、可用方案

登入界面,引导界面手动跳转时finish()

主页设置为singleInstance (或者

FLAG_ACTIVITY_CLEAR_TOP) 。退出都是先退到主页,再点一次退出  finish()。(不用exit,黑屏影响用户体验)

因为这里是有两个主页所以两个都设置为FLAG_ACTIVITY_CLEAR_TOP的话,登入启动的第一个主页是可以正常退出,第二个主页会先退到第一个主页再退出。所以在二号主页要添加一句对一号页的finish().

5、加载模式里的statck
参见:

http://www.sjsjw.com/kf_mobile/article/030079ABA017071.asp

android 退出方案 导致内存泄露的更多相关文章

  1. Android开发 静态static类与static方法持有Context是否导致内存泄露的疑问

    简述 在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况: 单例模式,类的全局变量持有Context 或 Vie ...

  2. Andorid 内存溢出与内存泄露,几种常见导致内存泄露的写法

    内存泄露,大部分是因为程序的逻辑不严谨,但是又可以跑通顺,然后导致的,内存溢出不会报错,如果不看日志信息是并不知道有泄露的.但是如果一直泄露,然后最终导致的内存溢出,仍然会使程序挂掉.内存溢出大部分是 ...

  3. [Android Memory] App调试内存泄露之Context篇(上)

    转载自:http://www.cnblogs.com/qianxudetianxia/p/3645106.html Context作为最基本的上下文,承载着Activity,Service等最基本组件 ...

  4. Android下常见的内存泄露 经典

    转自:http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言,很多人在使用会不注意内存的问题. 于是有时遇到程序运行 ...

  5. Android大图片导致内存问题小结

    在网上看了部分Android中OOM的问题,现在根据理解,做一下笔记. Android OOM 产生的几种原因 1. 程序中使用了太多自己创建的Bitmap. 这种情况通常是最好解决的. 因为你明白你 ...

  6. Android使用Handler造成内存泄露的分析及解决方法

    一.什么是内存泄露? Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用 ...

  7. MPMoviePlayerController导致statusBar消失,导致内存泄露leak

    1.MPMoviePlayerController使statusBar消失 同事写项目时,运行程序总导致statusBar状态条消失,然后就是界面会上移20个像素,导致最下面空白界面,找原因一直不知道 ...

  8. Android handler 可能会造成内存泄露

    Android handler 可能会造成内存泄露 Android Studio 使用 Handler 时: private Handler handler = new Handler(){ @Ove ...

  9. ThreadLocal是否会导致内存泄露

    什么是内存泄露? 维基百科的定义:[内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存],我的理解就是程序失去了对某段内存的控制,那么这段内存就算是泄露了. ThreadLocal为什么会导致 ...

随机推荐

  1. iOS 第三方 需要 引用的库

    ================================================== AFNetWorking   是基于 nsurlconnection   所以不需要引入库 === ...

  2. poj2068--Nim

    题意:给你2n个人,两方各n个人,交叉坐,每个人可以取的石子有一个最大限制,总共有S颗石子,哪一方取了最后一颗石子就输了,问先取石子的这一方是否有必胜策略. DP,dp[i][j]代表第i个人还有J个 ...

  3. JVM JMM

  4. V$LATCH_PARENT和V$LATCH_CHILDREN

    V$LATCH_PARENT contains statistics about parent latches. The columns of V$LATCH_PARENT are identical ...

  5. js深入研究之扩展类,克隆对象,混合类(自定义的extend函数,clone函数,与augment函数)

    1.类扩展 /* EditInPlaceField类 */ /* 扩展函数 */ function extend(subClass, superClass) { var F = function() ...

  6. Delphi TcxTreeListColumn 的 ImageComboBox 用法

    1.设置图片如下: 设置默认值: if Trim(FQuery.fieldByName('cPersonCategory').AsString) = '' then begin CNode.Value ...

  7. delphi中通过http控件上载文件的问题(紧急) 整理的CSDN 帖子

    http控件能不能实现post文件?要求效果就像普通的html中通过表单(form中<INPUT TYPE="FILE" NAME="FILE1" SIZ ...

  8. 利用ThinkPHP搭建网站后台架构

    记录一下ThinkPHP搭建网站后台.调整好样式等操作步骤 下载好ThinkPHP(3.2.3),解压后将核心文件夹ThinkPHP以及index.php等文件复制到网站根目录如下图 对index.p ...

  9. hdu4778:状压dp+博弈

    题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...

  10. POJ1845 数论 二分快速取余

    大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题思路: 应用定理主要有三个: (1)   整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ...