I want to know the difference between using BaseAdapter and ArrayAdapter.
I have been achieving what I want through ArrayAdapters
In response to your 3 questions:
(1) BaseAdapter, according to the Android docs, is just a superclass of a number of adapter types, one of which is ArrayAdapter. There are a number of other adapters that are derived from BaseAdapter that fit different purposes. As a result it is unlikley there is any difference in efficiency between the two; you just get access to a different set of functions/methods with the various subclasses.
(2) The efficiency of your ArrayAdapter depends on the efficiency of what you're doing inside that class, i.e. the processing of bitmaps and other data.
(3) You could probably figure out a way to work your ListView using a different kind of adapter, however, the reason ArrayAdapter works is because it usually makes sense given the goal is to build an interactive list. The ArrayAdapte takes an Array, usually an ArrayList of objects, that it then processes to create the backing information for the ListView. In that sense the set up of ArrayList --> ArrayAdapter --> ListView just logically makes sense.