看到很多文章说不能随便把Activity的this针传给其它类使用,说很容易造成GC对Activity回收不了,怎么解决
举例如下::一个Activity示例的引用:
@Override 
protected void onCreate(Bundle state) { 
  super.onCreate(state); 
   
  TextView label = new TextView(this); 
  label.setText("Leaks are bad"); 
   
  setContentView(label); 
}
        这就意味着view保存了一个它所处的activity的引用(可以推想的是, activity所保有的其他对象也是如此——包括这个activity所拥有的View整体层级以及相关资源)。从此看来,如果一个activity类型的Context在内存中被泄露了的话,被涉及到的内存量是相当可观以及可怖的。但是可怕的是,如果不注意的话,泄露一整个activity是非常容易发生的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nieweilin/archive/2011/02/12/6180992.aspx

解决方案 »

  1.   

    我的模拟器在几个自己的APK间切换,老有些APK不能被回收从而GC把系统进程KILL掉了,造成模拟器挂掉。
      

  2.   


    也许,因为我用DDMS--Heap测试看了一下data object和Total Size都没有一直上升,有升有降啊!但用MAT如下操作::
    点击Dominator Tree,并按Package分组,选择自己所定义的Package 类点右键,在弹出菜单中选择List objects->With incoming references看到有些类有多份,不知道为什么,没看明白,是不是就是没有被GC回收的类?
      

  3.   

    我刚测试了一下一个APK在2个ACTIVITY里面来回跳转都存在很大的问题,就是用THIS。FINISH来回切!我用DDMS--Heap测试看了一下data object和Total Size都一直上升,升到很大才有一点下降,应该是有问题的。
      

  4.   

    引用 10 楼 skygray 的回复:
    真的想销毁的话
    在某个事件内
    int nPid = android.os.Process.myPid();
    android.os.Process.killProcess(nPid);直接杀掉程序进程,我曾经这么用过的,finish()只是将程序退出,而activity仍然在栈中存在
      

  5.   

    android 关于activity的堆栈顺序问题或关闭某个activity有时候我们有三个活动 abc,如果我们希望只有ac 那么在b中startActivity().之后直接用finish。有时候我们希望abc之后只有bc之间的返回这时候可以考虑 
    Intent.FLAG_ACTIVITY_NO_HISTORY.将a设置成这个 不让他在堆栈中。 
    对于堆栈的顺序问题 
    http://developer.android.com/intl/zh-CN/reference/android/content/Intent.html 
      

  6.   

    分析(Android下的任务和Activity栈)http://blog.csdn.net/wong_judy/archive/2010/03/20/5398476.aspx
      

  7.   

    Android下的任务和Activity栈http://wdp107.javaeye.com/blog/779215
      

  8.   


    android:allowTaskReparenting 
    是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务。 
    --------------------------------------------------------------- 
    android:alwaysRetainTaskState 
    是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态 
    --------------------------------------------------------------- 
    android:clearTaskOnLanunch 
    比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 从新启动 P, 是否显示 Q 
    --------------------------------------------------------------- 
    android:configChanges 
    当配置list发生修改时, 是否调用 onConfigurationChanged() 方法  比如 "locale|navigation|orientation". 
    --------------------------------------------------------------- 
    android:enabled 
    activity 是否可以被实例化, 
    --------------------------------------------------------------- 
    android:excludeFromRecents 
    是否可被显示在最近打开的activity列表里 
    --------------------------------------------------------------- 
    android:exported 
    是否允许activity被其它程序调用 
    --------------------------------------------------------------- 
    android:finishOnTaskLaunch 
    是否关闭已打开的activity当用户重新启动这个任务的时候 
    --------------------------------------------------------------- 
    android.icon 
    --------------------------------------------------------------- 
    android:label 
    --------------------------------------------------------------- 
    android:launchMode 
    activity启动方式,  "standard" "singleTop"  "singleTask" "singleInstance"  其中前两个为一组, 后两个为一组 
    --------------------------------------------------------------- 
    android:multiprocess 
    允许多进程 
    --------------------------------------------------------------- 
    android:name 
    activity的类名, 必须指定 
    --------------------------------------------------------------- 
    android:onHistory 
    是否需要移除这个activity当用户切换到其他屏幕时。 这个属性是 API level 3 中引入的 
    --------------------------------------------------------------- 
    android:permission 
    --------------------------------------------------------------- 
    android:process 
    一个activity运行时所在的进程名,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一 致。<application>中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将 你的程序放在多进程中运行。  如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。 如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。 
    --------------------------------------------------------------- 
    android:screenOrientation 
    activity显示的模式,  "unspecified" 默认值  "landscape" 风景画模式,宽度比高度大一些  "portrait" 肖像模式, 高度比宽度大。  "user" 用户的设置  "behind"  "sensor" "nosensor" 
    --------------------------------------------------------------- 
    android:stateNotNeeded 
    是否 activity被销毁和成功重启并不保存状态 
    --------------------------------------------------------------- 
    android:taskAffinity 
    activity的亲属关系, 默认情况同一个应用程序下的activity有相同的关系 
    --------------------------------------------------------------- 
    android:theme 
    activity的样式主题, 如果没有设置,则activity的主题样式从属于应用程序, 参见<application>元素的theme属性 
    --------------------------------------------------------------- 
    android:windowSoftInputMode 
    activity主窗口与软键盘的交互模式, 自从API level 3 被引入