繁体   English   中英

Singleton作为RecyclerView.Adapter的数据源

[英]Singleton as a data source for RecyclerView.Adapter

我可以使用单例实例作为数据源的适配器吗? 我将不会对Views / Context进行任何静态引用,而仅将简单数据存储在singleton中。 这样的解决方案是否会存在泄漏或缺点?

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    /* SINGLETON */
    private DataManager manager;

    public MyAdapter(DataManager manager) {
        this.manager = manager;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create vh
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        // bind vh
    }

    @Override
    public int getItemCount() {
        return manager.itemsCount();
    }

}

DataManager是一个单例对象,可在我的服务中保存状态/数据。

提前致谢。

因为它是单例,所以这意味着该类持有对该类实例的引用,因此数据将始终保存在内存中。 如果应用程序拥有大量资源,可能会导致其响应速度降低。

此外,如果您的应用程序占用空间很大,那么在内存不足的情况下,Android操作系统很可能会破坏您的应用程序。

如果可能(通常是这样),请避免单例。

您应该使用两种情况。

  • 如果要从服务器获取数据并传递给适配器,则应使用Singleton,因为这是保存数据的好主意,而不是每次都调用WebService。
  • 如果您的数据是静态的,则无需将数据保存在Singleton中,因为这会降低应用程序的速度。

引用单例的适配器不会泄漏任何内容。 如果未正确实施,您的数据管理器可能会泄漏内存。

使用单例存储静态数据就可以了。 使用完数据后,您就可以处置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM