亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android Handler消息傳遞機(jī)制

 更新時間:2022年12月16日 10:36:34   作者:上后左愛  
Handler是一套 Android 消息傳遞機(jī)制,主要用于線程間通信。用最簡單的話描述: handler其實就是主線程在起了一個子線程,子線程運行并生成Message,Looper獲取message并傳遞給Handler,Handler逐個獲取子線程中的Message

Handler 消息傳遞機(jī)制

Android中每一個應(yīng)用就是一個進(jìn)程,Handler消息傳遞機(jī)制 利用JAVA中多線程的概念,比如在主界面 就是UI主線程,同時在UI界面中某個框內(nèi)消息晃動就是子線程。

機(jī)制: Android中子線程不能操作主線程組件 但是場景: 必須在子線程中更新主線程的UI組件,比如下載的進(jìn)度條顯示,子線程復(fù)雜下載,但是告訴主線程下載進(jìn)度條 所以可以使用Handler機(jī)制

作用:

1. 在任意的線程中發(fā)送消息

2. 在主線程中獲取并且 處理消息

// 如何使用Handler周期性的更新消息,比如進(jìn)度條
package com.example.myapplication;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
// 從手機(jī)的通訊錄中獲取信息
public class MainActivity extends AppCompatActivity {
    final int TIME = 60;    //定義時間長度
    final int TIMER_MSG = 0x001;    //定義消息代碼
    private ProgressBar timer;    //聲明水平進(jìn)度條
    private int mProgressStatus = 0;    //定義完成進(jìn)度
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer = (ProgressBar) findViewById(R.id.timer);
        // 3. 啟動進(jìn)度條
        handler.sendEmptyMessage(TIMER_MSG);
    }
    //創(chuàng)建Handler對象實現(xiàn)1秒中更新一次進(jìn)度
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(TIME - mProgressStatus > 0){
                mProgressStatus +=1;
                timer.setProgress(TIME-mProgressStatus);
                // 通過消息代碼進(jìn)行子線程識別
                handler.sendEmptyMessageDelayed(TIMER_MSG,1000);
            }else{
                Toast.makeText(MainActivity.this, "時間到!游戲結(jié)束!", Toast.LENGTH_SHORT).show();         //提示時間已到
            }
        }
    };
}

Handler Looper MessageQueue關(guān)系

Handler 與Looper 中MessageQueue 之間通過Message進(jìn)行交互

Message是Handler 與Looper 之間交互的橋梁

Message: 對象屬性 :

1. Int 整形

2.obj Object類型

3.replyTo 發(fā)送到何處 what 自定義的

Message.Obatin()

Handler.obtainMessage() 實現(xiàn) 這兩個對象避免創(chuàng)造多余對象 導(dǎo)致對象的消息 Message 對象可以循環(huán)利用

package com.example.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.widget.ViewFlipper;
import androidx.appcompat.app.AppCompatActivity;
// 從手機(jī)的通訊錄中獲取信息
public class MainActivity extends AppCompatActivity {
    final int FLAG_MSG = 0x001;    //定義要發(fā)送的消息代碼
    private ViewFlipper flipper;   //定義ViewFlipper
    private Message message;        //聲明消息對象
    //定義圖片數(shù)組
    private int[] images = new int[]{R.drawable.img1, R.drawable.img2, R.drawable.img3,
            R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8};
    private Animation[] animation = new Animation[2];  //定義動畫數(shù)組,為ViewFlipper指定切換動畫
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        flipper = (ViewFlipper) findViewById(R.id.viewFlipper);  //獲取ViewFlipper
        for (int i = 0; i < images.length; i++) {      //遍歷圖片數(shù)組中的圖片
            ImageView imageView = new ImageView(this);  //創(chuàng)建ImageView對象
            imageView.setImageResource(images[i]);  //將遍歷的圖片保存在ImageView中
            flipper.addView(imageView);             //加載圖片
        }
        //初始化動畫數(shù)組
        animation[0] = AnimationUtils.loadAnimation(this, R.anim.slide_in_right); //右側(cè)平移進(jìn)入動畫
        animation[1] = AnimationUtils.loadAnimation(this, R.anim.slide_out_left); //左側(cè)平移退出動畫
        flipper.setInAnimation(animation[0]);   //為flipper設(shè)置圖片進(jìn)入動畫效果
        flipper.setOutAnimation(animation[1]);  //為flipper設(shè)置圖片退出動畫效果
        // 開啟廣告輪播 主線程中
        message = Message.obtain();
        message.what = FLAG_MSG;
        handler.sendMessage(message);
    }
    //創(chuàng)建Handler對象實現(xiàn)1秒中更新一次進(jìn)度
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == FLAG_MSG) {
                flipper.showPrevious();                  //示下一張圖片
            }
            message = handler.obtainMessage(FLAG_MSG);   //獲取要發(fā)送的消息
            handler.sendMessageDelayed(message, 3000);  //延遲3秒發(fā)送消息
        }
    };
}

Looper 使用

Handler 在主線程中創(chuàng)建 自動幫我們創(chuàng)建Looper對象

如果在子線程中創(chuàng)建 Handler 中 LooperThread

1. 子線程中創(chuàng)造Handler

2. 初始化Looper對象 Looper.prepare()

3.new Handler()

4.looper.loop

package com.example.myapplication;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
public class LooperThread extends Thread {
    public Handler handler;					//聲明一個Handler對象
    @Override
    public void run() {
        super.run();
        //初始化Looper對象
        Looper.prepare();
        //實例化一個Handler對象
        handler = new Handler() {
            public void handleMessage(Message msg) {
                Log.i("Looper", String.valueOf(msg.what));
            }
        };
        Message m=handler.obtainMessage();	//獲取一個消息
        m.what=0x7;						//設(shè)置Message的what屬性的值
        handler.sendMessage(m);			//發(fā)送消息
        Looper.loop();						//啟動Looper
    }
}

到此這篇關(guān)于Android Handler消息傳遞機(jī)制的文章就介紹到這了,更多相關(guān)Android Handler內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android實現(xiàn)頭像上傳功能

    Android實現(xiàn)頭像上傳功能

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)頭像上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • android開發(fā)教程之startActivityForResult使用方法

    android開發(fā)教程之startActivityForResult使用方法

    這篇文章主要介紹了android開發(fā)教程之startActivityForResult使用方法,需要的朋友可以參考下
    2014-03-03
  • Android Touch事件分發(fā)深入了解

    Android Touch事件分發(fā)深入了解

    這篇文章主要為大家詳細(xì)介紹了Android Touch事件分發(fā),內(nèi)容很詳細(xì),感興趣的朋友可以參考一下
    2016-04-04
  • Android短信驗證碼自動填寫實現(xiàn)代碼

    Android短信驗證碼自動填寫實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android短信驗證碼自動填寫實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 詳解Android的兩種事件處理機(jī)制

    詳解Android的兩種事件處理機(jī)制

    這篇文章主要介紹了詳解Android的兩種事件處理機(jī)制,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • Android實現(xiàn)登錄注冊界面框架

    Android實現(xiàn)登錄注冊界面框架

    這篇文章主要介紹了Android實現(xiàn)登錄注冊界面的框架,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄

    BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄

    這篇文章主要為大家介紹了BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄實現(xiàn)效果詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android仿淘寶商品瀏覽界面圖片滾動效果

    Android仿淘寶商品瀏覽界面圖片滾動效果

    這篇文章主要為大家詳細(xì)介紹了Android仿淘寶商品瀏覽界面圖片滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android仿荷包APP啟動動畫

    Android仿荷包APP啟動動畫

    這篇文章主要為大家詳細(xì)介紹了Android仿荷包APP啟動動畫的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android自定義密碼樣式 黑點轉(zhuǎn)換成特殊字符

    Android自定義密碼樣式 黑點轉(zhuǎn)換成特殊字符

    這篇文章主要為大家詳細(xì)介紹了Android自定義密碼樣式的制作方法,黑點換成¥、%等特殊字符,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論