En respuesta a sus 3 preguntas:
(1) BaseAdapter , según los documentos de Android, es solo una superclase de varios tipos de adaptadores, uno de los cuales es ArrayAdapter. Hay una serie de otros adaptadores que se derivan de BaseAdapterque se adaptan a diferentes propósitos. Como resultado, es improbable que exista alguna diferencia de eficiencia entre los dos; simplemente obtiene acceso a un conjunto diferente de funciones / métodos con las diversas subclases.
(2) La eficiencia de su ArrayAdapter depende de la eficiencia de lo que está haciendo dentro de esa clase, es decir, el procesamiento de mapas de bits y otros datos.
(3) Probablemente pueda encontrar una manera de trabajar ListViewcon un tipo diferente de adaptador, sin embargo, la razón por la que ArrayAdapterfunciona es porque generalmente tiene sentido dado que el objetivo es crear una lista interactiva. El ArrayAdaptetoma un Array, generalmente un ArrayListde objetos, que luego procesa para crear la información de respaldo para el ListView. En ese sentido, la configuración de ArrayList-> ArrayAdapter-> ListViewlógicamente tiene sentido.