Actualice un SimpleCursorAdapter después de realizar el trabajo en un subproceso que no sea UI

Estoy tratando de llamar a .notifyDataSetChange () en un SimpleCursorAdapter que se muestra en un ListView desde un subproceso que no analiza la interfaz de usuario de XML y no puedo entender cómo. He buscado por todas partes y todo lo que he encontrado son artículos que hablan sobre la actualización desde ListView, lo que no estoy haciendo. No puedo encontrar una manera de pasar el adaptador u obtenerlo del padre o lo que sea que deba hacer para llamar a un método desde otro hilo.

The ListView se actualizará bien la próxima vez que inicie la actividad, pero quiero que se actualice tan pronto como se realice el análisis XML para que el usuario vea los nuevos datos de inmediato.

La respuesta es probablemente simple; Es solo eludirme. ¡Gracias de antemano por cualquier ayuda

Aquí está mi código:

public class DirectoryListActivity extends DirectoryActivity {

public final Handler mHandler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.directory_list);

    // Populate the ListView
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(
        directoryPeople.PEOPLE_TABLE
    );

    String asColumnsToReturn[] = { 
            //snip
    };

    mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null,
            null, null, directoryPeople.DEFAULT_SORT_ORDER);

    startManagingCursor(mCursor);

// HERE'S THE ADAPTER
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.directory_people_item, mCursor,
            new String[]{
                //snip
            new int[]{
                //snip
    ); 

    ListView av = (ListView)findViewById(R.id.listPeople);
    av.setAdapter(adapter);

    //Perform sync in background
    startXMLParseThread();

}

    public void startXMLParseThread() {

    new Thread () {

        boolean success = false;

        public void run() {
            try {
                // XML-Parsing and Table-Updating code

            } catch (Exception e) {
                success = false;
            }

            mHandler.post(new Runnable() {
                public void run() {
                    TextView txtUpdateStatus = (TextView)findViewById(R.id.txtUpdateStatus);
                    if (success) {
                        txtUpdateStatus.setText(R.string.synced);
                    } else {
                        txtUpdateStatus.setText(R.string.sync_failed);
                    }
                    adapter.notifyDataSetChanged(); // ECLIPSE HATES
                }
            });
        }
    }.start();
    }
}
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta