/**
* 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]);
}
* 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);
}
}