Getting recent stations
However as I understood SQLite calls shouldn't be made on UI thread.


To be honest I wasn't aware of this: I make SQLite calls on the UI thread in many apps.
I think it's fine, unless you expect the calls might be slow.
But since you already got it working with AsyncTask,
then you can just as well leave as it is.

I have some other recommendations though.

Change the method to return List&lt;Station&gt; instead of ArrayList&lt;Station&gt;. You should try to use interface types (List&lt;&gt;) whenever possible instead of implementations (ArrayList&lt;&gt;).

A simpler way to iterate over the cursor:

while (cursor.moveToNext()) {
    Station s = new Station();
    s.setStationId(cursor.getInt(0));
    s.setStationName(cursor.getString(1));
    s.setLatitude(Double.parseDouble(cursor.getString(2)));
    s.setLongitude(Double.parseDouble(cursor.getString(3)));
    s.setType(cursor.getString(4));
    s.setTimeSearched(cursor.getString(5));
    stations.add(s);
}


But actually... Why does doInBackground return a Cursor? Why not do everything in this method and do nothing in onPostExecute? It seems that would make a lot more sense.