欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android入門(mén)之Handler的使用教程詳解

 更新時(shí)間:2022年11月25日 09:18:03   作者:TGITCIC  
這篇文章主要為大家詳細(xì)介紹了Android中Handler機(jī)制的使用,文中的示例代碼講解詳細(xì),有需要的朋友可以借鑒參考下,希望能夠?qū)Υ蠹矣兴鶐椭?/div>

簡(jiǎn)介

我們?cè)谇懊娴腁ndroid教程中已經(jīng)提到過(guò)這么一件事:Android在啟動(dòng)后會(huì)有一個(gè)主線程。它不允許任何子線程去改變主UI線程里的內(nèi)容。

這么做是為了妨止,萬(wàn)一有一個(gè)帶有大事務(wù)的線程導(dǎo)致了渲染組件時(shí)間過(guò)長(zhǎng)最終導(dǎo)致Android UI出現(xiàn)“閃退”、“崩潰”的保護(hù)機(jī)制。

而實(shí)際我們?cè)贏ndroid操作里的確是會(huì)有一些“耗時(shí)”的事情而采用異步線程,如:首頁(yè)打開(kāi)時(shí)調(diào)用第三方地圖定位API、調(diào)用第三方銀行API來(lái)顯示你的余額、調(diào)用第三方社保顯示你的當(dāng)前社保繳納費(fèi)用和額度。

這種加載我們都會(huì)使用異步,一旦異步加載完后拿到結(jié)果再“刷新”在我們的主界面的控件里。那么此時(shí)由于Android的保護(hù)機(jī)制就不可以直接在異步線程里一個(gè)set()就完事了。

因此Android給我們提供了Handler機(jī)制。

Handler我們可以認(rèn)為它是一個(gè)和Android主進(jìn)程間的通道。

當(dāng)異步任務(wù)、子任務(wù)等需要改變主UI線程里的控件的渲染、值、顯示用變化,那么我們就通過(guò)Handler發(fā)一條消息。

當(dāng)主線程Listener到了消息,然后就可以去做相應(yīng)的值的改變和渲染了。

我們?yōu)榱顺浞终f(shuō)明這個(gè)問(wèn)題我們用一個(gè)ImageView,然后在里面每隔X毫秒,換一個(gè)圖片從而實(shí)現(xiàn)下面這樣的一個(gè)“動(dòng)畫(huà)”效果來(lái)說(shuō)明Android里的Handler的使用方法。

項(xiàng)目結(jié)構(gòu)

項(xiàng)目結(jié)構(gòu)很簡(jiǎn)單,只有8個(gè)圖,這8個(gè)圖是8個(gè)楨。每X毫秒在原來(lái)的圖位置上換一個(gè)圖,然后滾播,以到達(dá)“動(dòng)畫(huà)”效果。

我把這8楨圖給出,供各位自己去練習(xí)吧。

代碼

前端

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context="org.mk.android.demohandlerwithanim.MainActivity" >
 
    <ImageView
        android:id="@+id/imgAnimation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        />
 
</RelativeLayout>

后端

package org.mk.android.demohandlerwithanim;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
 
import java.util.Timer;
import java.util.TimerTask;
 
public class MainActivity extends AppCompatActivity {
    int imgids[] = new int[]{R.drawable.a_1, R.drawable.a_2, R.drawable.a_3, R.drawable.a_4, R.drawable.a_5, R.drawable.a_6, R.drawable.a_7, R.drawable.a_8};
    int imgstart = 0;
    ImageView imgAnimation;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgAnimation = findViewById(R.id.imgAnimation);
        Handler imgAnimationHandler = new ImgAnimatonHandler();
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                imgAnimationHandler.sendEmptyMessage(101);
            }
        }, 0, 100);
    }
 
    class ImgAnimatonHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 101) {
                imgAnimation.setImageResource(imgids[imgstart++ % 8]);
            }
        }
    }
}

代碼導(dǎo)讀

我們使用的是ImageView里的setImageResource來(lái)輪換圖片做到動(dòng)畫(huà)效果;

我們使用了Handler,在Handler.handleMessage里來(lái)?yè)QImageView里的圖;

然后我們使用了一個(gè)Timer()的schedule線程,以每100毫秒向Handler發(fā)一個(gè)emptyMessage(101)這樣的一個(gè)消息給到Handler的Listener,所以在handleMessage方法中如果what==101就“飛”。

最終就實(shí)現(xiàn)了這樣的一個(gè)效果了

到此這篇關(guān)于Android入門(mén)之Handler的使用教程詳解的文章就介紹到這了,更多相關(guān)Android Handler內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論