El subproceso de interfaz de usuario está disponible durante toda la vida visible de la aplicación, que puede abarcar una combinación de actividades múltiples.
Cualquier cosa que cambie en los puntos de vista debe ser realizada en hilo de interfaz de usuario y onPostExecute de AsyncTask refleja la misma lógica mediante la ejecución de las instrucciones en el interior de hilo de interfaz de usuario.
Puede usar runOnUiThread en su propio Thread
para realizar cambios en Views. Pero desde AsyncTask tiene en el método PostExecute (que también se ejecuta en el subproceso de la interfaz de usuario) por lo que lógicamente no necesita utilizar runOnUiThread allí.
actualización
cuanto a su pregunta: Sí, onPostExecute todavía será llamado (porque su invocado por un hilo separado), incluso si su actividad se destruye y si el método manipulará Vistas, simplemente obtendrá Force Close error porque la referencia a su actividad ya no está disponible.
'onPostExcecute' se ejecutará, pero lanza una excepción para tratar de ejecutar en un hilo muerto si su actividad se destruye. Si tiene una AsyncTask ejecutándose cuando su actividad puede cerrarse, considere mover su código a un servicio o usar un cargador. – Jave
en caso de Actividad destruida: Se bloqueará porque perdió la referencia con la Actividad de origen. En caso de Actividad detenida, aún se ejecuta en esa Actividad. Para este escenario: debe usar el servicio intencionado y obtener el resultado a través de Broadcast. –