C# 我需要在每个活动中处理哪些项目?
为了获得可用内存,我需要在每个活动中处理哪些项目? 我正在使用recyclerview、listview、textview、edidtext和按钮 在destroy方法中将它们设置为null是一种好的做法吗C# 我需要在每个活动中处理哪些项目?,c#,android,xamarin,C#,Android,Xamarin,为了获得可用内存,我需要在每个活动中处理哪些项目? 我正在使用recyclerview、listview、textview、edidtext和按钮 在destroy方法中将它们设置为null是一种好的做法吗 private List<InventoryPreviewClass> mItems; private ListView mlistview; private EditText mSearch; private EditText etSearchAlwaysOn; privat
private List<InventoryPreviewClass> mItems;
private ListView mlistview;
private EditText mSearch;
private EditText etSearchAlwaysOn;
private LinearLayout mContainer;
private bool mAnimatedDown;
string dpPath;
private bool mIsAnimating;
private MyListViewAdapterInventory mAdapter;
SQLiteConnection db;
private TextView mTxtHeaderFirstName;
private TextView mTxtHeaderLastName;
private bool mFirstNameAscending;
private bool mLastNameAscending;
List<String> ID;
List<String> Name;
Spinner CategorySpinner;
protected override void OnDestroy()
{
base.OnDestroy();
mItems = null;
mlistview = null;
mSearch = null;
etSearchAlwaysOn = null;
mContainer = null;
dpPath = null;
mAdapter = null;
db = null;
mTxtHeaderFirstName = null;
mTxtHeaderLastName = null;
ID = null;
Name = null;
CategorySpinner = null;
}
private-List-mItems;
私有列表视图;
私人编辑研究;
私人编辑文本etSearchAlwaysOn;
私人线路布局mContainer;
私人住宅区;
字符串路径;
私人布尔动画制作不当;
私人MyListViewAdapterInventory mAdapter;
sqlitedb;
私有文本视图mTxtHeaderFirstName;
私有文本视图mTxtHeaderLastName;
私人博物馆博物馆;
私人住宅;
列表ID;
名单名称;
纺纱机分类纺纱机;
受保护的覆盖无效OnDestroy()
{
base.ondestory();
mItems=null;
mlistview=null;
mSearch=null;
etSearchAlwaysOn=null;
mContainer=null;
dpPath=null;
mAdapter=null;
db=null;
mTxtHeaderFirstName=null;
mTxtHeaderLastName=null;
ID=null;
Name=null;
CategorySpinner=null;
}
有必要把它们全部处理掉吗?或者,它会自动处理这些项目,如果没有在使用
private List<InventoryPreviewClass> mItems;
private ListView mlistview;
private EditText mSearch;
private EditText etSearchAlwaysOn;
private LinearLayout mContainer;
private bool mAnimatedDown;
string dpPath;
private bool mIsAnimating;
private MyListViewAdapterInventory mAdapter;
SQLiteConnection db;
private TextView mTxtHeaderFirstName;
private TextView mTxtHeaderLastName;
private bool mFirstNameAscending;
private bool mLastNameAscending;
List<String> ID;
List<String> Name;
Spinner CategorySpinner;
protected override void OnDestroy()
{
base.OnDestroy();
mItems = null;
mlistview = null;
mSearch = null;
etSearchAlwaysOn = null;
mContainer = null;
dpPath = null;
mAdapter = null;
db = null;
mTxtHeaderFirstName = null;
mTxtHeaderLastName = null;
ID = null;
Name = null;
CategorySpinner = null;
}
public class MyHelper {
private static MyHelper instance; // for instance singleton helper
private final Context mContext;
private MyHelper(@NonNull Context context) {
mContext = context.getApplicationContext();
// ...
}
private List<InventoryPreviewClass> mItems;
private ListView mlistview;
private EditText mSearch;
private EditText etSearchAlwaysOn;
private LinearLayout mContainer;
private bool mAnimatedDown;
string dpPath;
private bool mIsAnimating;
private MyListViewAdapterInventory mAdapter;
SQLiteConnection db;
private TextView mTxtHeaderFirstName;
private TextView mTxtHeaderLastName;
private bool mFirstNameAscending;
private bool mLastNameAscending;
List<String> ID;
List<String> Name;
Spinner CategorySpinner;
protected override void OnDestroy()
{
base.OnDestroy();
mItems = null;
mlistview = null;
mSearch = null;
etSearchAlwaysOn = null;
mContainer = null;
dpPath = null;
mAdapter = null;
db = null;
mTxtHeaderFirstName = null;
mTxtHeaderLastName = null;
ID = null;
Name = null;
CategorySpinner = null;
}
public class MyHelper {
private static MyHelper instance; // for instance singleton helper
private final Context mContext;
private MyHelper(@NonNull Context context) {
mContext = context.getApplicationContext();
// ...
}
您可以将它们设置为null,但这不是必需的。一旦一个活动被破坏,一切都会被破坏。一般来说,您需要注意的唯一一点是不要保留对某个活动的引用(在其他地方),因为否则它根本不会被销毁,因此使用的组件也不会被gcc删除。例如,不要使用传递给singleton实用工具帮助程序的活动来访问上下文,而是从中获取应用程序上下文:MyHelper(Context ctx){mAppCtx=ctx.getApplicationContext()}。谢谢,所以当我调用finish时,它会自动销毁右上方的对象吗?你是什么意思?也和手机号码有关吗?我注意到,一些移动设备在管理gc收集器时有不同的行为。当您调用finish()时,它会将它们标记为gcc'd,但只要gcc需要,它们就会根据gcc策略被销毁。引用我的意思是引用,就像你的mItems是对列表的引用一样(在C/C++中你称之为指针,在Java中你称之为引用)。此外,是的,理论上,每个安卓的制造商都可以对系统进行任何改变;你只能在香草droid上测试默认行为,比如在Nexus和Pixel手机上。因此,当我销毁我的活动时,我的列表需要设置为null?“你可以将它们设置为null,但这不是必需的”我引用我自己的话:)你可以将它们设置为null,但这不是必需的。一旦一个活动被破坏,一切都会被破坏。一般来说,您需要注意的唯一一点是不要保留对某个活动的引用(在其他地方),因为否则它根本不会被销毁,因此使用的组件也不会被gcc删除。例如,不要使用传递给singleton实用工具帮助程序的活动来访问上下文,而是从中获取应用程序上下文:MyHelper(Context ctx){mAppCtx=ctx.getApplicationContext()}。谢谢,所以当我调用finish时,它会自动销毁右上方的对象吗?你是什么意思?也和手机号码有关吗?我注意到,一些移动设备在管理gc收集器时有不同的行为。当您调用finish()时,它会将它们标记为gcc'd,但只要gcc需要,它们就会根据gcc策略被销毁。引用我的意思是引用,就像你的mItems是对列表的引用一样(在C/C++中你称之为指针,在Java中你称之为引用)。此外,是的,理论上,每个安卓的制造商都可以对系统进行任何改变;你只能在vanilla droid上测试默认行为,比如在Nexus和Pixel手机上。所以当我销毁我的活动时,我的列表需要设置为null?“你可以将它们设置为null,但不需要”我引用自己的话:)我在每个活动中使用一个类。在这个类中,我使用的是“私有静态字符串”,它们也在每个活动中调用。我唯一担心的清理是删除广播列表之类的内容