告诉我一些关于convertView和ViewHolder的知识点。要求：回答中必须包括4个关键点，分别是:[1]convertView的作用； [2]ViewHolder的作用； [3]它们如何协同工作以提高ListView的性能； [4]是否可以不用convertView和ViewHolder，以及这种选择的利弊。回答限制在300字以内。
user
[1] convertView的作用：`convertView`是`ListView`中复用已存在的视图的一项机制。当列表滚动时，已经不再可见的列表项的视图会被缓存起来，然后用作新的列表项的视图，这样可以避免重复创建视图，降低内存消耗，提升性能。

[2] ViewHolder的作用：`ViewHolder`作为`convertView`的一种辅助构造，主要用于存储视图中常见的控件，如`TextView`、`ImageView`等，使得在列表滚动过程中，再次获取这些控件实例时无需重新调用`findViewById`，从而减少方法调用的性能开销。

[3] 协同工作以提高性能：当`ListView`滚动时，不在屏幕显示范围内的项目将被回收，此时其视图即`convertView`会被存储起来。`Adapter`在加载新的列表项时，会优先尝试复用这些已经从内存中被移除但依旧有效的视图，并通过`ViewHolder`快速获取相关控件，这大大提高了视图的加载速度，改善了用户体验。

[4] 不使用convertView和ViewHolder的利弊：虽然理论上`ListView`可以不使用`convertView`和`ViewHolder`，但这样做会导致每次滚动都需重新创建视图，增加了UI线程的工作负担，可能导致界面响应缓慢、卡顿等问题。虽然无`convertView`应用会使代码实现过程简单，不使用`ViewHolder`也可能简化特定的代码逻辑，但从长远来看，如此实现大大限制了程序的性能表现，用户体验也会受到影响。总之，为确保良好的应用性能，`convertView`和`ViewHolder`的结合使用非常必要。
assistant