日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android内部通信handler

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android内部通信handler 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是handler?

handler主要用在用戶同自己創建的線程進行通信,andorid應用程序在主線程中會維護一個消息隊列,通過Message對象在線程間進行通信.在handler內部的handlerMessage中處理消息請求

其實學習過VC++的朋友應該可以很好的理解handler,類似于VC++中的消息處理

?

Message對象都都存儲了什么?

一共有4個參數,arg1,arg2,obj,what

arg1和arg2 是int類型,可以通過成員方法setData和getData訪問進行修改

obj ,object類型,可以存儲任意類型,比如放一個對象,一個int值,也就是消息中的附加數據

what,int類型,就是用戶定義的消息類型碼,可以通過what判斷是什么消息

?

我們來做個例子,這個例子有一個TextView顯示進度和完成及停止的內容,一個ProgressBar來顯示進度,兩個Button,用于開始和停止

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.ssln.handler.MainActivity" ><TextViewandroid:id="@+id/tvMsg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><ProgressBarandroid:id="@+id/progbar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btnstart"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="開始" /><Buttonandroid:id="@+id/btnstop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止" /></LinearLayout></LinearLayout>

MainActivity.java

package com.ssln.handler;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.ProgressBar; import android.widget.TextView;public class MainActivity extends Activity {private final int UPDATEMSG = 1; // 更新消息類型private final int COMPLETEMSG=2; // 完成消息private final int STOPMSG=3; // 停止消息private final int MAXVALUE = 100; // ProgressBar最大值private boolean isStop=false; //是否停止 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final TextView tvMsg = (TextView) findViewById(R.id.tvMsg);final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progbar);Button btnstart = (Button) findViewById(R.id.btnstart);Button btnstop=(Button)findViewById(R.id.btnstop);// 設置最大值 progressBar.setMax(MAXVALUE);// 初始化一個handler,用于更新textview和progressBarfinal Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch(msg.what){case UPDATEMSG:tvMsg.setText(msg.obj.toString() + "%");progressBar.setProgress(Integer.valueOf(msg.obj.toString()));break;case COMPLETEMSG:tvMsg.setText("完成了更新操作");break;case STOPMSG:tvMsg.setText("停止了更新操作");break;}}};//停止操作btnstop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {isStop=true;}});//開始 使用BUTTON來創建一個新線程,來更新數據btnstart.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {new Thread() {public void run() {Message msg;for (int i = 0; i < MAXVALUE; i++) {if(isStop){break;}// 循環發送消息,實現內部通信msg = new Message();msg.what = UPDATEMSG;msg.obj = i + 1;handler.sendMessage(msg);try {// 睡眠一段時間Thread.sleep(150);} catch (InterruptedException e) {e.printStackTrace();}}if(!isStop){//發送完成消息msg = new Message();msg.what =COMPLETEMSG ;handler.sendMessage(msg);}else{//發送停止消息msg = new Message();msg.what =STOPMSG ;handler.sendMessage(msg);isStop=false;}}}.start();}});}}

當點擊開始按鈕后,每間隔150毫秒,會發送一個updatemsg,其中的obj為當前的進度值,進度條設置進度為obj,textview會顯示百分比



當進度到達100%的時候,會發送一個COMPLETEMSG 完成消息,用于TextView更新顯示



如果在更新過程中,點擊了停止,那開始的線程中就會跳出循環,并發送一個 STOPMSG 停止消息


轉載于:https://www.cnblogs.com/alwaysfirst/p/4006838.html

總結

以上是生活随笔為你收集整理的android内部通信handler的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。