C# 我需要在每个活动中处理哪些项目?

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

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


}
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;
}
有必要把它们全部处理掉吗?或者,它会自动处理这些项目,如果没有在使用

  • 为了获得可用内存,我需要在每个活动中处理哪些项目?我正在使用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;
    
    
    }
    
  • 有必要把它们全部处理掉吗?或者,它会自动处理这些项目,如果没有在使用

  • 回答您的问题:

  • 没有

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

    public class MyHelper {
    private static MyHelper instance;     // for instance singleton helper
    private final Context mContext;
    
    private MyHelper(@NonNull Context context) {
        mContext = context.getApplicationContext();
        // ...
    }
    
  • 没必要。系统将在需要时提供这些服务。系统也会随时关闭你的应用程序和进程,以防内存不足,但在这一点上,这已经无关紧要了

  • 为了获得可用内存,我需要在每个活动中处理哪些项目?我正在使用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;
    
    
    }
    
  • 有必要把它们全部处理掉吗?或者,它会自动处理这些项目,如果没有在使用

  • 回答您的问题:

  • 没有

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

    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,但不需要”我引用自己的话:)我在每个活动中使用一个类。在这个类中,我使用的是“私有静态字符串”,它们也在每个活动中调用。我唯一担心的清理是删除广播列表之类的内容