Как запустить метод в основном потоке из побочного?
Можно передать Handler основного потока
В основном потоке создаем:Handler handler = new Handler(Looper.getMainLooper());
// Передаем его в побочный поток
В побочном используем:handler.post(new Runnable() {
	public void run() {
		// Код для основного потока
		// ...
	}
});
Либо как посоветовали выше, проще, через runOnUiThread
Observer/Observable из JDK7+. Если JDK6, то самостоятельно реализовать данный шаблон.