Android RecyclerView适配器中的静态和非静态viewholder有什么区别?

Android RecyclerView适配器中的静态和非静态viewholder有什么区别?,android,static,android-recyclerview,android-viewholder,Android,Static,Android Recyclerview,Android Viewholder,这种方法的优点是什么(在我的类MyAdapter extends RecyclerView.Adapter中使用静态嵌套类): 这种方法(使用成员内部类): 或者它不影响性能,两种方法都可以使用?通过使用static,它只意味着您可以在其他适配器中重复使用MyVh。如果您确实知道在该适配器中只需要MyVh,则应使其非静态 如果您在其他适配器中需要它,那么最好将它完全创建为一个单独的类,而不是一个嵌套类 对于静态与非静态,应该不会对性能产生影响 这更像是一个java问题,而不是一个Android问

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

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


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

通过使用static,它只意味着您可以在其他适配器中重复使用
MyVh
。如果您确实知道在该适配器中只需要
MyVh
,则应使其非静态

如果您在其他适配器中需要它,那么最好将它完全创建为一个单独的类,而不是一个嵌套类


对于静态与非静态,应该不会对性能产生影响

这更像是一个java问题,而不是一个Android问题。如果要将内部类的实例从类中取出,建议对其使用static以避免内存泄漏。您可以看一看解释内部类内存泄漏的文章

基本上纽约时报是这么说的:

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

回答性能问题时,您可以查看答案。静态视图占用的内存比另一个要少,但我们再次讨论的是回收器,它将回收实例,因此内存影响不是问题。

如果您想在许多地方使用一个viewholder,建议创建单独的类。否则,如果要仅在一个位置使用viewholder,请创建非静态嵌套viewholder。静态的viewholder没有任何意义


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

完美的解释我不知道你是否在2年后读过这篇文章,但也许你可以回答这个问题:你的回答是否暗示,使用非静态的内部类viewholder实际上是可以的,还是我误解了它?是的,只要你正确使用它,它实际上是可以的,在不将实例带到其父实例之外的情况下,对最需要的用例进行简单有效的解释
static class MyVH extends RecyclerView.ViewHolder {...}
  class MyVH extends RecyclerView.ViewHolder {...}