已采納回答 / 攻城獅ZSP
老師講的方法有點問題,消息開始發送以后,實際上形成了一個消息發送循環,去除原始的消息并不能停止這個循環,要停止這個隊,在發送消息的前面加個開關,就行了。代碼如下: if(flag){ mainHandler.sendMessageDelayed(message, 1000); } case R.id.stop:flag=false; break;
2016-11-05
已采納回答 / 小羅希冀
我自己個人認為Callback其實就是在Looper(消息泵)和Handler中間加上一層過濾網,一些對于Handler沒有意義或者不重要的信息直接交給Callback處理。打個比方,Looper就是大臣,Callback就是太監,Handler就是皇帝,大臣(Looper)在上報消息的時候先要把消息給太監(Callback)看一看,太監(Callback)看完以后覺得事關重大,就將消息上報給皇帝(Handler),如果太監(Callback)覺得這是根本就不重要,它就會自行處理或者拒絕接受這個信息。所以...
2016-09-24
已采納回答 / _InnoVation
為了實現循環播放OnCerate方法中的handler.postDelayed(runnable,1000);實現了程序1s后調用runnable線程。在runnable線程中切換圖片后又重新調用了handler.postDelayed(runnable,1000);方法。runnable線程每切換一次圖片后繼續調用它本身,這種循環調用實現了runnable每隔1s被就會執行一次,表面上看就是圖片每隔1s切換一次。答得比較淺,歡迎拍磚~~
2016-09-09
已采納回答 / lsjava
當前View的AttachInfo信息,這個信息是用來在窗口處理中用的。Android的窗口系統就是用過AttachInfo來判斷View的所屬窗口的,這個了解下就行。詳細信息設計到Android框架層的一些東西。<...code...>
2016-07-07
已采納回答 / Swy㏄
handlerThread是子線程的。平時在線程中實例化handler(首先的需要確定線程中包含looper)在線程中創建looper需要在線程的run()方法中先調用looper.prepare()來初始化looper,然后再run()方法后調用looper.loop()方法來死循環 這樣就在當前線程中創建好了looper而handlerthread就是更加簡單的用來創建線程中的looper
2016-05-22
已采納回答 / 粗魯的男人
每一個handler必須要對應一個looper,主線程會自動創建Looper對象,不需要我們手動創建,所以主線程可以直接創建handler。在new handler的時候沒有傳入指定的looper就會默認綁定當前創建handler的線程的looper,如果沒有looper就報錯。如果自己開個子線程,那肯定得自己創建looper對象啊,或者用HandlerThread,的getlooper也行。
2016-05-20