RecyclerView Adapter中静态和非静态视图的区别是什么?

时间:2015-07-08 19:48:46

标签: android static android-recyclerview android-viewholder

这种方法的优点是什么(在我的类MyAdapter中使用静态嵌套类扩展了RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}

这种方法(使用成员内部类):

  class MyVH extends RecyclerView.ViewHolder {...}

或者它不影响性能,可以使用这两种方法吗?

3 个答案:

答案 0 :(得分:88)

这是一个java问题,而不是Android问题。如果要将它们的实例从类中取出,建议对内部类使用static以避免内存泄漏。你可以看看this很棒的帖子,它解释了内部类的内存泄漏。

基本上是什么nyx说:

  • 如果将viewholder声明为static,则可以在其他适配器中重用它。无论如何,我不建议这样做,创建一个新的分离类并从多个地方使用它,它确实更有意义。一个目的是一个目的。
  • 对于视图持有者,此类将仅在适配器内使用,其实例不应仅根据定义转到片段或活动或其他位置。这意味着静态或非静态,在视图持有者的情况下,是相同的。

回答您的效果问题,您可以查看this答案。静态的内存比另一个占用更少的内存,但是我们再次谈论将回收实例的回收站,因此内存影响不是问题。

答案 1 :(得分:14)

通过使用静态,这意味着您可以在其他适配器中重用MyVh。如果您确定在该一个适配器中只需要MyVh,那么您应该将其设置为非静态。

如果你需要在其他适配器中使用它,甚至可以更好地将它完全创建为一个单独的类,而不是嵌套类。

对静态与非静态的性能应该没有影响!

答案 2 :(得分:0)

如果要在多个地方使用一个Viewholder,则建议创建单独的类。否则,如果您只想在一个地方使用Viewholder,则创建一个非静态的嵌套Viewholder。静态查看器没有任何意义

在大多数地方,我使用嵌套的viewholder类