RecyclerView Adapter 中的静态和非静态视图持有者有什么区别?
What difference between static and non static viewholder in RecyclerView Adapter?
这种方法有什么优点(在我的 class MyAdapter 中使用静态嵌套 class 扩展 RecyclerView.Adapter):
static class MyVH extends RecyclerView.ViewHolder {...}
这种方法(使用内部成员 class):
class MyVH extends RecyclerView.ViewHolder {...}
或者它不影响性能并且两种方法都可以使用?
使用 static 意味着您可以在其他适配器中重复使用 MyVh
。如果您确定在那个适配器中只需要 MyVh
,那么您应该使它成为非静态的。
如果您将在其他适配器中需要它,最好将它完全创建为单独的 class,而不是嵌套的 class.
静态与非静态对性能应该没有影响!
与其说是 Android 问题,不如说是 java 问题。如果您将它们的实例从 class 中取出,建议对内部 classes 使用 static 以避免内存泄漏。您可以查看 this awesome post,它解释了内部 classes 上的内存泄漏。
基本上是 nyx 所说的:
- 如果将视图持有者声明为静态的,则可以在其他适配器中重用它。无论如何,我不建议这样做,创建一个新的分隔 class 并从多个地方使用它,它确实更有意义。一个 class 用于一个目的。
- 在视图持有者的情况下,此 classes 将仅在适配器内部使用,它们的实例不应根据定义进入片段或 activity 或其他地方。这意味着在视图持有者的情况下,静态或非静态是相同的。
回答你的性能问题,你可以看看this答案。静态的会比另一个占用更少的内存,但同样,我们正在谈论将回收实例的回收器,因此内存影响不是问题。
如果您想在多个地方使用一个视图,那么建议创建单独的 classes。否则,如果您只想在一个地方使用 viewholder,则创建一个 non-static 嵌套 viewholder。静态视图持有者没有任何意义
在大多数地方,我使用嵌套的viewholder class
这种方法有什么优点(在我的 class MyAdapter 中使用静态嵌套 class 扩展 RecyclerView.Adapter):
static class MyVH extends RecyclerView.ViewHolder {...}
这种方法(使用内部成员 class):
class MyVH extends RecyclerView.ViewHolder {...}
或者它不影响性能并且两种方法都可以使用?
使用 static 意味着您可以在其他适配器中重复使用 MyVh
。如果您确定在那个适配器中只需要 MyVh
,那么您应该使它成为非静态的。
如果您将在其他适配器中需要它,最好将它完全创建为单独的 class,而不是嵌套的 class.
静态与非静态对性能应该没有影响!
与其说是 Android 问题,不如说是 java 问题。如果您将它们的实例从 class 中取出,建议对内部 classes 使用 static 以避免内存泄漏。您可以查看 this awesome post,它解释了内部 classes 上的内存泄漏。
基本上是 nyx 所说的:
- 如果将视图持有者声明为静态的,则可以在其他适配器中重用它。无论如何,我不建议这样做,创建一个新的分隔 class 并从多个地方使用它,它确实更有意义。一个 class 用于一个目的。
- 在视图持有者的情况下,此 classes 将仅在适配器内部使用,它们的实例不应根据定义进入片段或 activity 或其他地方。这意味着在视图持有者的情况下,静态或非静态是相同的。
回答你的性能问题,你可以看看this答案。静态的会比另一个占用更少的内存,但同样,我们正在谈论将回收实例的回收器,因此内存影响不是问题。
如果您想在多个地方使用一个视图,那么建议创建单独的 classes。否则,如果您只想在一个地方使用 viewholder,则创建一个 non-static 嵌套 viewholder。静态视图持有者没有任何意义
在大多数地方,我使用嵌套的viewholder class