handle在安卓开发的使用

在安卓系统开发过程中经常会涉及到UI的处理,而UI的处理与用户输入以及其他线程相关的事件处理等,需要进行事件分发和处理。在安卓开发的过程中使用handle机制就可以帮助我们进行消息处理、UI更新、线程同步等操作,下面就来详细介绍一下handle的使用方法。

1. Handle的概念及作用

Handle是安卓系统中用来处理消息的一个类,主要用来发送和处理消息,一般主要应用于UI线程中。由于UI的更新和用户事件处理等涉及到线程之间的通信,而消息机制就是一种线程通信的方式,因此使用Handle可以在不同线程之间进行消息传递,完成线程间通信。通过它可以使在主线程与子线程间进行消息传递,保证线程之间能够进行信息交流。

2. Handle的创建和使用

2.1 Handle的创建

Handle的创建可以在主线程中或者子线程中实现,一般情况下我们在主线程当中使用Handler:(以在主线程中创建Handle为例)

```java

private Handler mHandler = new Handler() {

@Override// 接收消息

public void handleMessage(Message msg) {

switch (msg.what) {

case 0: // 进行UI操作

...

break;

default:

break;

}

}

};

```

该代码段中新建了一个Handler(即mHandler),并实现了其handleMessage()方法,handleMessage()方法将被调用来进行消息处理。由于handleMessage()方法运行在主线程当中,因此可以用来进行UI的更新操作,例如更改TextView的内容、更改Button的状态等。

2.2 Handle发送消息

根据Handler的用途,使用Handler应该要做的最为常见的行为之一就是向它发送消息。下面是在子线程中向主线程发送消息的示例代码:

```java

// 创建一个Message对象

Message message = Message.obtain();

// 定义消息传递内容

message.what = 0;

message.obj = "Hello World!";

// 发送该消息到消息队列中

mHandler.sendMessage(message);

```

2.3 Handle在子线程中使用

对于在子线程中进行UI操作,不能直接进行操作。因此需要使用到Handle的能力,在主线程中创建Handle,在子线程中向handle发送消息进行UI操作。下面的代码演示了如何在子线程中使用Handle:

```java

public class MainActivity extends AppCompatActivity {

private Button mButton; // Button控件

private Handler mHandler; // 用于实现UI更新的Handler

private static final int UI_UPDATE = 1; // UI更新标志

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 找到Button控件

mButton = findViewById(R.id.button);

// 在主线程中创建Handle

mHandler = new Handler() {

@Override// 实现方法

public void handleMessage(Message msg) {

switch (msg.what) {

// UI更新

case UI_UPDATE:

mButton.setText("更新文本");

break;

default:

break;

}

}

};

// 新建一个子线程

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(3000); // 睡眠3秒

// 向Handler发送UI更新消息

mHandler.sendEmptyMessage(UI_UPDATE);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}).start();

}

}

```

在子线程中,使用Thread.sleep()方法使该线程休眠了3秒,之后使用mHandler的sendEmptyMessage()方法向Handler发送UI更新消息,在该示例中,如果收到UI更新的消息,则更改Button按钮的文本。

3. Handle的自填充使用

Handle在使用过程中需要用户手动填写handlerMessage()方法,而如果我们的handlerMessage()方法比较多,需要进行一定的判断以及分类处理,则代码量较大,不易于维护。因此可以使用Handle的自填充能力进行更好的维护和可读性,下面的代码演示了如何使用该功能:

```java

public class MainActivity extends AppCompatActivity {

private Button mButton; // Button控件

private static final int UI_UPDATE = 1; // UI更新标志

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mButton = findViewById(R.id.button);

// 创建handle对象并实现AutoFillHandler接口

AutoFillHandler mHandler = new AutoFillHandler() {

// 填充函数,返回自定义两个变量First和Second

@Override

public Pair match(Message message) {

int what = message.what;

Object obj = message.obj;

switch (what) {

case UI_UPDATE:

return new Pair<>(what, obj);

default:

return null; // 返回空

}

}

// 根据填充函数返回自定制结果

// 避免写过多的HandlerMessage

@Override

public void handle(int what, Object obj) {

switch (what) {

case UI_UPDATE:

mButton.setText("更新文本");

break;

default:

break;

}

}

};

// 在主线程中调用该handle的轮询方法,轮训消息

mHandler.startLoop();

// 在子线程中向handle发送UI更新消息

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(3000);

mHandler.sendMessage(UI_UPDATE, null);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}).start();

}

}

```

自填充能力可用于分类处理不同消息,避免了过多的handlerMessage()方法及混乱的代码。同时也可以使用这个能力将其他服务和Activity的处理逻辑统一在一起,比如Android Lint服务处理逻辑中就采用了这个方式。

综上所述,Handle是安卓系统中用来处理消息的类,主要用于不同线程之间的消息传递与处理。通常我们使用Handler进行消息的发送,以及在Handler的handleMessage()方法中实现对各种消息的处理。Handle的使用范围包括在主线程和子线程中操作UI以及进行线程间通信等各个方面,更为常用的是在UI线程中操作UI。最后,Handle还可以利用自填充能力进行更为复杂的消息处理。


相关知识:
安卓7开发者选项在哪里设置
安卓系统是目前全球范围应用最广泛的移动端操作系统。在安卓7系统中,开发者选项是一个十分重要的设置项,其作用它能够帮助开发者在测试、调试、优化应用程序时迅速定位问题。本文将详细介绍安卓7开发者选项在哪里设置及原理。一、什么是安卓7开发者选项?安卓7开发者选项
2023-05-23
安装安卓开发程序后
安卓操作系统在全球拥有超过 80% 的市场份额,成为了移动设备中最流行的操作系统之一。这就使得安卓应用开发成为了一项非常重要的技能。在开始安卓应用的开发之前,第一步便是安装安卓开发程序。安卓开发程序是一套软件工具包,也称为 Android Studio,用
2023-05-23
unityue4安卓开发
Unity和UE4是目前比较流行的游戏引擎,在移动平台上的应用也有非常广泛的应用,尤其是在Android平台上。那么,Unity和UE4在Android平台上的开发原理是什么呢?1. 环境搭建首先需要下载Android Studio,安装JDK和NDK,配
2023-05-23
python能进行安卓应用开发吗
Python 是一种强大的编程语言,广泛应用于Web开发、数据分析、人工智能、机器学习、自然语言处理等各个领域。Python 对于 Android 应用开发也有很高的适用性,但与传统的 Java 开发模式还是有所不同。下面将从原理和详细介绍两个方面来解释这
2023-05-23
miui开发版内测和公测可以互刷吗安卓
MIUI是小米公司的自主研发的操作系统,目前已经推出了多个版本。为了使用户能够获得更好的使用体验和更加完善的产品功能,小米公司会在内部测试大量的新功能和修复bug。MIUI的内测和公测就是针对这一需求而推出的。MIUI的用户可以申请加入内测或公测团队,并获
2023-05-23
flutter和java开发安卓
安卓开发可分为两种方式:Java 开发和 Flutter 开发。Java 开发Java 是 Android 开发的标准语言,安卓开发者用 Java 开发应用程序,利用 Android SDK 中的Java 库。Java 是一种高级面向对象编程语言,它可以在
2023-05-23
delphi开发安卓应用
Delphi是一个集成开发环境(IDE),可用于开发应用程序,尤其是Windows平台上的桌面应用。但是,最近版本的Delphi不仅仅局限于开发桌面应用程序,它还可以开发跨平台的应用程序。其中一个重要的跨平台平台是安卓。下面介绍如何使用Delphi开发安卓
2023-05-23
开发一个简单的安卓app
开发一个简单的安卓app主要需要以下步骤:1.确定应用的需求和功能在开发app前,首先需要确定应用的需求和功能。开发者需要明确知道自己想要实现的功能,并且需要了解与该应用相关的市场需求和用户需求。可以根据这些信息规划应用的开发流程。2.选择开发工具选择一个
2023-04-28
安卓视频app实现投屏功能开发
在这篇文章中,我们将详细介绍如何为安卓视频app实现投屏功能。投屏功能允许用户将手机中的视频、图片或其他媒体内容通过无线网络发送到具有接收能力的大屏设备(如智能电视或投影仪)进行播放或展示。为了简化开发过程,我们将基于谷歌的Chromecast SDK实现
2023-04-28
安卓app用什么开发
安卓应用开发教程及原理详细介绍安卓应用(Android App)是指专门为运行在采用Android操作系统的智能手机或平板设备上设计的应用程序。这些应用可以在Android应用商店(如谷歌商店/Google Play Store)下载并安装在用户设备上使用
2023-04-28
安卓app开发自动获取手机信息
在安卓App开发中,自动获取手机信息是一项常见的功能,它可以为用户提供更好的服务和更好的用户体验。下面我们来介绍一下自动获取手机信息的原理和具体的实现方法。自动获取手机信息的原理:在安卓系统中,有很多内置的类和方法可以获取手机的基本信息,如: Build、
2023-04-28
basic开发安卓app
Basic是一种编程语言,可用于开发Android应用程序。它是一种结构化的编程语言,允许开发人员通过简单的语法来创建代码。Basic作为一种编程语言有很多不同的变种,也有很多不同的编译器可用。对于安卓应用程序的开发,安卓提供了一个名为"Basic4And
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1