Android中Handler與Message的簡(jiǎn)單實(shí)例
Android中Handler與Message的簡(jiǎn)單實(shí)例
前言:
雖然筆者已經(jīng)學(xué)習(xí)了Android的AsyncTask來(lái)實(shí)現(xiàn)一部消息的處理。但是在android的學(xué)習(xí)中,經(jīng)常會(huì)在一些demo中看到Handler與Message的一些使用,所以Handler與Message的學(xué)習(xí)也是有必要了。至于學(xué)多少,筆者還是比較堅(jiān)持自己的看法,“用多少,學(xué)多少”,畢竟已經(jīng)有了AsyncTask如此方便的東西,Handler與Message也不是那么必不可缺了。(如此文的簡(jiǎn)單了解一下還是不需要花太多時(shí)間的)
此實(shí)例是在handler中更新textview的內(nèi)容,新手讀者可能會(huì)問(wèn)為什么不直接在oncreate中一行解決呢?還是主要是需求問(wèn)題,倘若我們需要在子線(xiàn)程中從網(wǎng)上獲取內(nèi)容,然后更新到textview中,那么直接寫(xiě)在主線(xiàn)程中不合理的。但是由于此實(shí)例主要是一個(gè)參考作用,并且讓它更能讓新手理解,所以并沒(méi)有寫(xiě)從網(wǎng)絡(luò)獲取內(nèi)容的代碼了。(直接在子線(xiàn)程中是不能執(zhí)行更新UI的操作的,程序會(huì)崩潰)
上一下效果圖:
分別是點(diǎn)擊button前后效果
好了,直接看一下概念與代碼:
Message:
Message是在線(xiàn)程之間傳遞的消息,它可以在內(nèi)部攜帶少量的信息,用于再不同線(xiàn)程之間交換數(shù)據(jù)。除了what字段,還可以用arge1和arg2字段來(lái)攜帶一些整型數(shù)據(jù),使用obj字段攜帶一個(gè)Object對(duì)象。
Handler
Handler顧名思義就是處理者的意思,它主要是用于發(fā)送和處理消息的。發(fā)送消息一般是使用Handler的sendMessage()方法,而發(fā)出的消息經(jīng)過(guò)一系列地輾轉(zhuǎn)處理后,最終會(huì)傳遞到Handler的handleMessage()方法中。
MainActivity:
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { //定義UPDATE_TEXT這個(gè)整型敞亮,用于表示更新TextView這個(gè)動(dòng)作 public static final int UPDATE_TEXT = 1; private TextView text; private Button changeText; //創(chuàng)建一個(gè)Handler private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: //在這里可以進(jìn)行UI操作 //對(duì)msg.obj進(jìn)行String強(qiáng)制轉(zhuǎn)換 String string=(String)msg.obj; text.setText(string); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text); changeText = (Button) findViewById(R.id.change_text); changeText.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.change_text: new Thread(new Runnable() { @Override public void run() { //創(chuàng)建一個(gè)message //設(shè)置what字段的值為UPDATE_TEXT,主要是為了區(qū)分不同的message //設(shè)置message.obj的內(nèi)容 //調(diào)用Handler的message對(duì)象 //handler中的handlermessage對(duì)象是在主線(xiàn)程中運(yùn)行的 String string="Nice to meet you"; Message message = new Message(); message.what = UPDATE_TEXT; message.obj=string; handler.sendMessage(message); } }).start(); break; default: break; } } }
activity_main:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/change_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Change Text" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Hello world" android:textSize="20sp" /> </RelativeLayout>
以上就是Android中Handler與Message的使用,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android Handler,Message,MessageQueue,Loper源碼解析詳解
- Android 通過(guò)Messager與Service實(shí)現(xiàn)進(jìn)程間雙向通信案例詳解
- Android Handle原理(Looper,Handler和Message)三者關(guān)系案例詳解
- Android handle-message的發(fā)送與處理案例詳解
- 深入Android Handler,MessageQueue與Looper關(guān)系
- Android開(kāi)發(fā)使用Message對(duì)象分發(fā)必備知識(shí)點(diǎn)詳解
相關(guān)文章
Android RxJava異步數(shù)據(jù)處理庫(kù)使用詳解
RxJava是一種異步數(shù)據(jù)處理庫(kù),也是一種擴(kuò)展的觀察者模式。對(duì)于Android開(kāi)發(fā)者來(lái)說(shuō),使用RxJava時(shí)也會(huì)搭配RxAndroid,它是RxJava針對(duì)Android平臺(tái)的一個(gè)擴(kuò)展,用于Android 開(kāi)發(fā),它提供了響應(yīng)式擴(kuò)展組件,使用RxAndroid的調(diào)度器可以解決Android多線(xiàn)程問(wèn)題2022-11-11基于flutter?sound插件實(shí)現(xiàn)錄音與播放功能
這篇文章主要介紹了基于flutter?sound插件實(shí)現(xiàn)錄音與播放功能,介紹了如何錄音,如何播放本地和遠(yuǎn)程音頻文件,以及如何實(shí)現(xiàn)動(dòng)畫(huà),在錄制完音頻文件后如何上傳,這些都是我們平常使用這個(gè)功能會(huì)遇到的問(wèn)題。在使用的過(guò)程中遇到的問(wèn)題也有列出,需要的朋友可以參考下2022-05-05Android 定時(shí)器實(shí)現(xiàn)圖片的變換
這篇文章主要介紹了Android 定時(shí)器實(shí)現(xiàn)圖片的變換的相關(guān)資料,利用到定時(shí)器和handler,message的結(jié)合實(shí)現(xiàn)改功能,需要的朋友可以參考下2017-08-08Android中Retrofit+OkHttp進(jìn)行HTTP網(wǎng)絡(luò)編程的使用指南
Retrofit和OkHttp都是Square在GitHub上開(kāi)源的第三方HTTP支持包,兩個(gè)包可以搭配使用,本文即是來(lái)講解Android中Retrofit+OkHttp進(jìn)行HTTP網(wǎng)絡(luò)編程的使用指南:2016-07-07Android打印機(jī)--小票打印格式及模板設(shè)置實(shí)例代碼
這篇文章主要介紹了Android打印機(jī)--小票打印格式及模板設(shè)置實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04Android自定義View的實(shí)現(xiàn)方法實(shí)例詳解
本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹了Android自定義View的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09Android實(shí)現(xiàn)雙擊TitleBar回頂部的功能示例代碼
一個(gè)簡(jiǎn)單易用的導(dǎo)航欄TitleBar,可以輕松實(shí)現(xiàn)IOS導(dǎo)航欄的各種效果,下面這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)雙擊TitleBar回頂部功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09