2011-07-20 62 views
1

我現在正試圖復活一個項目。 getMainLooper()有個例外...安卓:getMainLooper()和Looper.myLooper之間的差異()

我認爲可能是MainLooper初始化有問題,並在此之前添加了Looper.prepareMainLoop()。

異常告訴我,有已經爲該對象彎針被拋出...

然後我試圖取代getMainLooper()與Looper.myLooper()和它的工作...

但我不明白爲什麼=)

其實我沒有得到這兩樣東西之間的區別。我覺得在哪裏getMainLooper()在我的項目中使用的地方它是應用程序的真正主彎針最好的地方,但我得到了我..

請解釋。

感謝您的關注

回答

10

不同的是,在Looper.prepareMainLooper()主UI線程的Looper準備。 Android應用程序通常不會調用此函數。由於主線程在第一次活動之前就準備好了活套,所以服務,提供商或廣播接收機已啓動。

Looper.prepare()在當前線程準備Looper。這個函數被調用後,線程可以調用Looper.loop()Handler先從處理消息。

因此,在你的情況下,你有兩個線程 - X和Y.X線程是主UI線程,它的Looper已經由Android準備好了。當你在Y線程中,並且你打電話給Looper.prepareMainLooper()時,你正試圖在X線程(主線程)中準備循環線程。這失敗了,因爲X的looper已經準備好了。但是,當你沿Y線程中調用Looper.prepare(),你實際上是準備彎Y中的線程,因此準備打電話Looper.loop()