为释放内存,我需要在每个活动中处理哪些项目? 我正在使用recyclerview,listview,textview,edidtext和按钮。
在destroy方法中将它们设置为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;
}
是否需要全部处置?否则,如果没有使用这些物品,它将自动处理?
答案 0 :(得分:3)
为释放可用内存,我需要在每个活动中处理哪些项目?我正在使用recyclerview,listview,textview,edidtext和按钮。
在destroy方法中将它们设置为null是一种好习惯吗?
是否需要全部处置?否则,如果没有使用这些物品,它将自动处理?
要回答您的问题:
都不是。
不,这不是一个好习惯,也不需要。相反,好的做法是不要保留对任何已通过活动的引用,这将导致内存泄漏,也不允许系统破坏活动本身。需要保留对传递的活动的引用时,请保留对应用程序上下文的引用:
public class MyHelper {
private static MyHelper instance; // for instance singleton helper
private final Context mContext;
private MyHelper(@NonNull Context context) {
mContext = context.getApplicationContext();
// ...
}
不需要。系统将在需要时对它们进行gcc处理。该系统还会在任何时候终止您的应用程序和进程,以防万一它的内存不足,但是那时候不再重要了。