【发布时间】:2014-03-05 21:06:01
【问题描述】:
我有一个红色的地方,将视图保留为活动的成员是不好的性能,因为每个视图都保留对其父上下文的引用,它将填满堆。这是真的吗?
想象一下这个活动:
public class MyActivity extends FragmentActivity{
private RelativeLayout mainLayout;
private LineraLayout menuLayout;
private FrameLayout tableLayout;
private Button buttonOk;
private Button buttonCancel;
@Override
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
mainLayout = (RelativeLayout) findViewById(R.id.mainlayout);
// And inflating other views
}
}
适配器呢?
public class MyAdapter extends BaseAdapter{
private MyActivity activity;
private ArrayList<MyObjects> myObjects;
public MyAdapter (MyActivity activity, ArrayList<MyObjects> myObjects){
this.activity = activity;
this.myObjects = myObjects;
}
}
这是糟糕的表现吗?将活动作为参数而不是上下文传递是不是很糟糕?如果我想从适配器访问父类MyActivity 的公共方法怎么办?
非活动类
public MyDatabase{
private Context context;
private SQLiteDatabase db;
public MyDatabase(Context context){
this.context = context;
this.db = new DatabaseHelper(context).getWritableDatabase();
}
public Object getData(int id){
return db.query(params...);
}
public static class DatabseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context){
super(context, "my_db", null, 1);
}
}
}
为什么人们说当类构造函数需要Context作为参数时,你应该传递getApplicationContext()而不是Activity?
【问题讨论】:
标签: android memory reference memory-leaks