android内存管理(二)

/**
 * static容易造成内存泄露,
   因为:在activity中调用finsh,表面是没有,但进程还在,这里面都有很深入的问题了,你在内存中使用了bitmap用static去保存,如果你是作为一个成员的话,这个activity不存在了,这个里面的变量也就不存在了,但如果用staticf去保存就会一直保存在内存中,只要不等于null就会一直存在,activity不在了,这个进程还在

1这个图片就很容易造成oom,因为你按back的时候这是一个静态的,是没有被是放的,之前我们分析过进程不会消失,这个list就会一直指着,不会随着这个activity的申请和改变就是放,点了5次,就申请了解5块内存,这个没有被是放
 * @author Administrator
 *
 */
public class MainActivity extends Activity implements OnClickListener{


     //   public static ArrayList<Object> list = new ArrayList<Object>();


    // private ArrayList<Object>  list = new ArrayList<Object>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public void onClick(View v) {
        // 这里面第点击一个就会增加一个对象,由于引用是被引用到的,所以内存就会增加上去
        // 现在目前啊,这个list是属于这个activity的,所以back的时候也,这个activity的对象也,没有人引用它,它就会被回收,这里面的东西就会跟着被回收,这个问题不大
        // 现在说另外一个问题
        list.add(new int[5][1024][1024]);
    }

}

///现在我们看另外一个问题/

public class SubActivity extends Activity {


    /**
     * 这里面可能就有少年产生一种想法,就想访问MainActity里面list,这时候访问就会把MainActivity里面的list变量变成了static
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 这时候就会这样访问,这样不对,其实这里面产生了一个问题,进程不会消失,在MainActiivty点击一下,这个就加到了list上,
        // MainActivty  back的时候,static的变量,这时候这个list指向的这个内存地址会一直指着,因为它是一个static变量,
        // 不会随着它属于的这个actiivty生成或者销汇,申请和是放而改变它的值,这时候这个list就留在内存里面了,没有人去是放它,点5次就创建了5次,就很容易造成内存泄露
        // 这就是因为activity返回的时候,进各不结束导致的
        // 现在我们来看这个工程里面的图片,先看看第一个问题,context参数 工程oom2_2
        //MainActivity.this.list.get(0);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值