android中Handle類的用法實(shí)例分析
本文實(shí)例講述了android中Handle類的用法。分享給大家供大家參考。具體如下:
當(dāng)我們?cè)谔幚硐螺d或是其他需要長(zhǎng)時(shí)間執(zhí)行的任務(wù)時(shí),如果直接把處理函數(shù)放Activity的OnCreate或是OnStart中,會(huì)導(dǎo)致執(zhí)行過(guò)程中整個(gè)Activity無(wú)響應(yīng),如果時(shí)間過(guò)長(zhǎng),程序還會(huì)掛掉。Handler就是把這些功能放到一個(gè)單獨(dú)的線程里執(zhí)行,與Activity互不影響。
當(dāng)用戶點(diǎn)擊一個(gè)按鈕時(shí)如果執(zhí)行的是一個(gè)常耗時(shí)操作的話,處理不好會(huì)導(dǎo)致系統(tǒng)假死,用戶體驗(yàn)很差,而Android則更進(jìn)一步,如果任意一個(gè)Acitivity沒(méi)有響應(yīng)5秒鐘以上就會(huì)被強(qiáng)制關(guān)閉,因此我們需要另外起動(dòng)一個(gè)線程來(lái)處理長(zhǎng)耗時(shí)操作,而主線程則不受其影響,在耗時(shí)操作完結(jié)發(fā)送消息給主線程,主線程再做相應(yīng)處理。那么線程之間的消息傳遞和異步處理用的就是Handler。
以下模擬一個(gè)簡(jiǎn)單的相冊(cè)查看器,每隔2秒自動(dòng)更換下一張照片。
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <ImageView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/p1" android:gravity="center" /> </LinearLayout>
HandleActivity類:
package com.ljq.handle; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ImageView; public class HandleActivity extends Activity { private ImageView imageView = null; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: imageView.setImageResource(R.drawable.p1); break; case 1: imageView.setImageResource(R.drawable.p2); break; case 2: imageView.setImageResource(R.drawable.p3); break; case 3: imageView.setImageResource(R.drawable.p4); break; } super.handleMessage(msg); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView = (ImageView) findViewById(R.id.imageView); thread.start(); } int what = 0; Thread thread = new Thread(new Runnable() { public void run() { while (true) { handler.sendEmptyMessage((what++) % 4); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); }
運(yùn)行結(jié)果:
希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android應(yīng)用中使用ContentProvider掃描本地圖片并顯示
這篇文章主要介紹了Android應(yīng)用中使用ContentProvider掃描本地圖片并顯示的方法,比調(diào)用本地圖庫(kù)的方法更加靈活和可定制,需要的朋友可以參考下2016-04-04Android ViewPager實(shí)現(xiàn)智能無(wú)限循環(huán)滾動(dòng)回繞效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)智能無(wú)限循環(huán)滾動(dòng)回繞效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Flutter實(shí)現(xiàn)不同縮放動(dòng)畫效果詳解
這篇文章主要為大家詳細(xì)介紹了Flutter利用不同組件(ScaleTransition、SizeTransition、AnimatedSize和AnimatedBuilder)實(shí)現(xiàn)不同縮放動(dòng)畫效果,感興趣的可以動(dòng)手嘗試一下2022-06-06Android實(shí)現(xiàn)動(dòng)態(tài)自動(dòng)匹配輸入內(nèi)容功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)動(dòng)態(tài)自動(dòng)匹配輸入內(nèi)容功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android開發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼
彈窗的排隊(duì)執(zhí)行在App中是一個(gè)很常見的應(yīng)用場(chǎng)景,這篇文章為大家介紹了兩個(gè)Flutter實(shí)現(xiàn)彈窗攔截器的示例代碼,感興趣的小伙伴可以學(xué)習(xí)一下2023-09-09Android實(shí)現(xiàn)滑動(dòng)折疊Header全流程詳解
這篇文章主要介紹了Android實(shí)現(xiàn)滑動(dòng)折疊Header,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11Android編程開發(fā)錄音和播放錄音簡(jiǎn)單示例
這篇文章主要介紹了Android編程開發(fā)錄音和播放錄音的方法,結(jié)合實(shí)例形式分析了Android多媒體開發(fā)中音頻操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08