Handler的一个图片轮播程序
1 Handler是什么?
* Handler:用來更新UI(主線程)的一套機制,也是一套消息處理機制,我們可以發送信息,也可以通過它來處理消息。
* 比如最常見的Activity的生命周期:它的回調方法都是通過Handler機制去發送消息的,根據不同的Message來做相應的分支處理。
2 為什么要使用Handler?
* 因為android在設計的時候就封裝了一套消息創建,傳遞,處理機制,如果不遵循這樣的機制就沒有辦法來跟新UI的信息,就會拋出異常。(不能在一個非UI線程中跟新UI)。
* 一個Handler實例其實綁定了一個關聯的thread線程和這個線程的message queue;handler會將message和runnable對象發送到它所關聯的message queue中去, 同時它也會執行從message queue中出來的message和runnable。
* 3 handler的四種使用的方法:
* sendMessage
* sendMessageDelayed
* post(Runnable)
* postDelayed(Runnable,long)
*
圖片輪播
MainActivity.class
4 sendMessage方法
//需要Handler的Message方法private Handler handler = new Handler() { //重寫HandleMessage來接收消息,怎么發送一個消息?要在Created方法里面new 出一個線程在里面發送消息@Overridepublic void handleMessage(Message msg) {textView.setText(" " + msg.arg1+ " --- "+msg.arg2);//更新TextView里面的文字super.handleMessage(msg);}};在onCreate方法里面創建一個線程:
new Thread() {@Overridepublic void run() {try {Thread.sleep(2000);//要發送消息,那就要先創建一個MessageMessage message = new Message();message.arg1 =88;message.arg2 =888;handler.sendMessage(message);//調用Handler的sendMessage方法來發送消息給handleMessage來處理消息} catch (InterruptedException e) {e.printStackTrace();}super.run();}}.start();//不要忘記調用start方法,否者線程里面的run方法不會執行調用Message的obj方法來發送比較多的數據,來發送Message的數據載體:
現在內部創建一個Person類:
然后在線程里面new一個Person對象:
new Thread() {@Overridepublic void run() {try {Thread.sleep(2000);//要發送消息,那就要先創建一個MessageMessage message = new Message();Person person = new Person();person.age = 22;person.name = "xiaoxjxoaxm";message.obj = person;//調用Message的obi方法來接收person的信息handler.sendMessage(message);//調用Handler的sendMessage方法來發送消息給handleMessage來處理消息} catch (InterruptedException e) {e.printStackTrace();}super.run();}}.start();更新TextView里面的數據:
private Handler handler = new Handler() {//重寫HandleMessage來接收消息,怎么發送一個消息?要在Created方法里面new 出一個線程在里面發送消息@Overridepublic void handleMessage(Message msg) {textView.setText(" " + msg.obj);//更新TextView里面的文字super.handleMessage(msg);}};有時候不要創建一個Message對象,直接調用系統的Message的obtainMessage()方法
new Thread() {@Overridepublic void run() {try {Thread.sleep(2000);//有時候不必創建一個Message對象,而是調用系統的Message對象Message message=handler.obtainMessage();//獲取Message對象Person person = new Person();person.age = 22;person.name = "xiaoxjxoaxm";message.obj = person;//調用Message的obi方法來接收person的信息handler.sendMessage(message);//調用Handler的sendMessage方法來發送消息給handleMessage來處理消息} catch (InterruptedException e) {e.printStackTrace();}super.run();}}.start();有時候不調用 handler.sendMessage(message)來發送消息,還可以調用 message.sendToTarget()來發送消息。target就是一個Handler,它其實就是調用sendMessage來發送消息。
handler.removeCallbacks();//里面傳入一個Runnable對象,來移除消息
new Handler(Callback )的時候里面的那個回調方法的作用就是,方便handler內部信息的攔截(當這個消息符合我們的攔截的對象),當callback的handlerMessage方法的返回值為true的時候,handler本身的那個handlerMessage方法將得不到回調的信息,所以第二個handlerMessage方法并不會執行。如果那個返回值為false的話,第二個方法就會得到執行。
private Handler handler=new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {Toast.makeText(getApplicationContext(),""+2,Toast.LENGTH_SHORT).show();return false;}}){@Overridepublic void handleMessage(Message msg) {Toast.makeText(getApplicationContext(),""+1,Toast.LENGTH_SHORT).show();}};轉載于:https://www.cnblogs.com/linewman/p/9918401.html
總結
以上是生活随笔為你收集整理的Handler的一个图片轮播程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孕妇梦到大鱼是男孩还是女孩
- 下一篇: 关“视觉神经系统是怎么形成的?”的思考