android内存管理(四)

来源:互联网 发布:egd网络黄金最新报价 编辑:程序博客网 时间:2024/06/01 09:52

有时候我们用application传递数据要注意的地方

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class MainActivity extends Activity implements OnClickListener{


    public ArrayList<Object> list = new ArrayList<Object>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list.add("123");
        list.add("123");
        // 这里面我们使用application来传递数据
        MyApplication application = (MyApplication) getApplication();
        application.setData(list); // 这么写问题就非常大了,你这个application将保持这个list的引用,而这个list是这个actiivty的成员,既然你把持这list的引用,
        // 那activity就不能被是放掉,这就违背了,所以使用下面的方法
        application.setData(list.clone());// 所以你这里需要clone一个新的,这个是一个新的
        //这个时候就可以在subactivity中获取值了
    }


    @Override
    public void onClick(View v) {
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class MyApplication extends Application {


    private Object data;


    @Override
    public void onCreate() {
        super.onCreate();
    }


    public Object getData() {
        return data;
    }


    public void setData(Object data) {
        this.data = data;
    }
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class SubActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      MyApplication application =   (MyApplication) getApplication();
      List<Object> list = (List<Object>) application.getData();
    }
}


0 0
原创粉丝点击