我需要在每个活动中处理哪些物品?

时间:2018-10-11 05:35:11

标签: c# android xamarin

为释放内存,我需要在每个活动中处理哪些项目? 我正在使用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;


}

是否需要全部处置?否则,如果没有使用这些物品,它将自动处理?

1 个答案:

答案 0 :(得分:3)

  1. 为释放可用内存,我需要在每个活动中处理哪些项目?我正在使用recyclerview,listview,textview,edidtext和按钮。

  2. 在destroy方法中将它们设置为null是一种好习惯吗?

  3. 是否需要全部处置?否则,如果没有使用这些物品,它将自动处理?

要回答您的问题:

  1. 都不是。

  2. 不,这不是一个好习惯,也不需要。相反,好的做法是不要保留对任何已通过活动的引用,这将导致内存泄漏,也不允许系统破坏活动本身。需要保留对传递的活动的引用时,请保留对应用程序上下文的引用:

    public class MyHelper {
    private static MyHelper instance;     // for instance singleton helper
    private final Context mContext;
    
    private MyHelper(@NonNull Context context) {
        mContext = context.getApplicationContext();
        // ...
    }
    
  3. 不需要。系统将在需要时对它们进行gcc处理。该系统还会在任何时候终止您的应用程序和进程,以防万一它的内存不足,但是那时候不再重要了。