Android中Handler與Message的簡單實例
Android中Handler與Message的簡單實例
前言:
雖然筆者已經(jīng)學(xué)習(xí)了Android的AsyncTask來實現(xiàn)一部消息的處理。但是在android的學(xué)習(xí)中,經(jīng)常會在一些demo中看到Handler與Message的一些使用,所以Handler與Message的學(xué)習(xí)也是有必要了。至于學(xué)多少,筆者還是比較堅持自己的看法,“用多少,學(xué)多少”,畢竟已經(jīng)有了AsyncTask如此方便的東西,Handler與Message也不是那么必不可缺了。(如此文的簡單了解一下還是不需要花太多時間的)
此實例是在handler中更新textview的內(nèi)容,新手讀者可能會問為什么不直接在oncreate中一行解決呢?還是主要是需求問題,倘若我們需要在子線程中從網(wǎng)上獲取內(nèi)容,然后更新到textview中,那么直接寫在主線程中不合理的。但是由于此實例主要是一個參考作用,并且讓它更能讓新手理解,所以并沒有寫從網(wǎng)絡(luò)獲取內(nèi)容的代碼了。(直接在子線程中是不能執(zhí)行更新UI的操作的,程序會崩潰)
上一下效果圖:
分別是點擊button前后效果
好了,直接看一下概念與代碼:
Message:
Message是在線程之間傳遞的消息,它可以在內(nèi)部攜帶少量的信息,用于再不同線程之間交換數(shù)據(jù)。除了what字段,還可以用arge1和arg2字段來攜帶一些整型數(shù)據(jù),使用obj字段攜帶一個Object對象。
Handler
Handler顧名思義就是處理者的意思,它主要是用于發(fā)送和處理消息的。發(fā)送消息一般是使用Handler的sendMessage()方法,而發(fā)出的消息經(jīng)過一系列地輾轉(zhuǎn)處理后,最終會傳遞到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這個整型敞亮,用于表示更新TextView這個動作 public static final int UPDATE_TEXT = 1; private TextView text; private Button changeText; //創(chuàng)建一個Handler private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: //在這里可以進行UI操作 //對msg.obj進行String強制轉(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)建一個message //設(shè)置what字段的值為UPDATE_TEXT,主要是為了區(qū)分不同的message //設(shè)置message.obj的內(nèi)容 //調(diào)用Handler的message對象 //handler中的handlermessage對象是在主線程中運行的 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的使用,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android RxJava異步數(shù)據(jù)處理庫使用詳解
RxJava是一種異步數(shù)據(jù)處理庫,也是一種擴展的觀察者模式。對于Android開發(fā)者來說,使用RxJava時也會搭配RxAndroid,它是RxJava針對Android平臺的一個擴展,用于Android 開發(fā),它提供了響應(yīng)式擴展組件,使用RxAndroid的調(diào)度器可以解決Android多線程問題2022-11-11基于flutter?sound插件實現(xiàn)錄音與播放功能
這篇文章主要介紹了基于flutter?sound插件實現(xiàn)錄音與播放功能,介紹了如何錄音,如何播放本地和遠程音頻文件,以及如何實現(xiàn)動畫,在錄制完音頻文件后如何上傳,這些都是我們平常使用這個功能會遇到的問題。在使用的過程中遇到的問題也有列出,需要的朋友可以參考下2022-05-05Android中Retrofit+OkHttp進行HTTP網(wǎng)絡(luò)編程的使用指南
Retrofit和OkHttp都是Square在GitHub上開源的第三方HTTP支持包,兩個包可以搭配使用,本文即是來講解Android中Retrofit+OkHttp進行HTTP網(wǎng)絡(luò)編程的使用指南:2016-07-07Android打印機--小票打印格式及模板設(shè)置實例代碼
這篇文章主要介紹了Android打印機--小票打印格式及模板設(shè)置實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04Android實現(xiàn)雙擊TitleBar回頂部的功能示例代碼
一個簡單易用的導(dǎo)航欄TitleBar,可以輕松實現(xiàn)IOS導(dǎo)航欄的各種效果,下面這篇文章主要給大家介紹了關(guān)于Android如何實現(xiàn)雙擊TitleBar回頂部功能的相關(guān)資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09