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

Android入門之Handler的使用教程詳解

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

簡介

我們在前面的Android教程中已經(jīng)提到過這么一件事:Android在啟動后會有一個主線程。它不允許任何子線程去改變主UI線程里的內(nèi)容。

這么做是為了妨止,萬一有一個帶有大事務的線程導致了渲染組件時間過長最終導致Android UI出現(xiàn)“閃退”、“崩潰”的保護機制。

而實際我們在Android操作里的確是會有一些“耗時”的事情而采用異步線程,如:首頁打開時調(diào)用第三方地圖定位API、調(diào)用第三方銀行API來顯示你的余額、調(diào)用第三方社保顯示你的當前社保繳納費用和額度。

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

因此Android給我們提供了Handler機制。

Handler我們可以認為它是一個和Android主進程間的通道。

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

當主線程Listener到了消息,然后就可以去做相應的值的改變和渲染了。

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

項目結(jié)構(gòu)

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

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

代碼

前端

<?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]);
            }
        }
    }
}

代碼導讀

我們使用的是ImageView里的setImageResource來輪換圖片做到動畫效果;

我們使用了Handler,在Handler.handleMessage里來換ImageView里的圖;

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

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

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

相關(guān)文章

最新評論