Singleton作为RecyclerView.Adapter的数据源

时间:2017-03-20 09:44:36

标签: java android

我可以使用使用单例实例作为数据源的适配器吗?我不会对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是一个单例对象,用于保存我的服务中的状态/数据。

提前致谢。

3 个答案:

答案 0 :(得分:1)

由于它是一个单例,这意味着该类保存对该类实例的引用,因此数据将始终保存在内存中。这可能会导致您的应用在拥有大量资源时响应速度变慢。

此外,如果您的应用占用空间很大,那么在内存不足的情况下,Android操作系统更有可能销毁您的应用。

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

答案 1 :(得分:1)

您应该使用或不使用两种情况。

  • 如果您从服务器获取数据并传递给适配器,那么您应该使用Singleton,因为最好是保存数据而不是每次调用WebService。
  • 如果您的数据是静态的,那么您无需在Singleton中保存数据,因为它会降低您的应用速度。

答案 2 :(得分:1)

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

使用单例来存储静态数据就好了。您可以在使用它时处理数据。