假设考虑以下两个不同的定义;
全局变量一;
View mainView;
ListView categoryList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_expense_add,container,false);
return mainView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
categoryList = (ListView) mainView.findViewById(R.id.categoryList);
categoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
catListAdapter.updateRadioButtons(position);
if(amount.hasFocus())
((MainActivity)getActivity()).hideKeyboard();
}
});
本地的
Listview categoryList = (ListView) mainView.findViewById(R.id.categoryList);
categoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
catListAdapter.updateRadioButtons(position);
if(amount.hasFocus())
((MainActivity)getActivity()).hideKeyboard();
}
});
哪个更适合防止内存泄漏?
如上所示定义内部类触摸监听器是否安全,例如项目点击监听器?当我的 fragment 被销毁时,它是否仍然引用它?如何避免内存泄漏?
最佳答案
你的变量是局部变量还是成员变量都没有区别。根据经验,如果您只需要特定方法中的变量,请将其设为该方法的本地变量(始终使用尽可能小的范围)。
内部类适用于小方法,但对于较大的方法,请创建成员变量或类以保持代码更简洁。
您上面显示的代码没有泄漏。
关于android - fragment - 全局 View 变量与本地和内部类监听器以及内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35759079/