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还可以利用自填充能力进行更为复杂的消息处理。


相关知识:
安卓9开发者怎么设置中文
在安卓9开发中设置中文,需要了解系统的语言设置以及代码中的语言支持。在本文中,我将详细介绍如何设置中文,包括设置系统语言和代码中的多语言支持等方面。系统语言设置安卓9系统默认支持多种语言,包括中文。如果用户的设备已经设置了中文语言,那么应用程序中的文本也会
2023-05-23
安卓5
开发者模式是一个在Android系统中的选择,允许用户访问隐藏的开发选项,例如USB调试,GPU呈现模式,跟踪整个系统等等。开发人员模式经常使用在测试和开发应用程序时,但是在某些情况下,它们可能会影响到普通用户。 此外,这允许您更改系统或应用程序配置,这可
2023-05-23
安卓11怎么调出开发者模式
在安卓11手机中,调出开发者模式可以让用户使用一些高级的功能,比如开启USB调试、查看CPU使用情况等等。本文将介绍如何调出安卓11手机的开发者模式。第一步:打开“设置”应用在安卓11手机主界面找到“设置”应用图标,点击进入。也可以向下滑动通知栏,在右上角
2023-05-23
安陆开发区卓湾村拆迁计划
卓湾村位于湖北省安陆市开发区,是一个具有较为特殊历史背景的村庄,由于地理位置隐蔽,曾一度成为偷渡者和非法贩运人员活动的地方,同时也是当地贫困户聚集地。为了改善卓湾村的发展环境,吸引更多的经济活力,安陆市政府决定对卓湾村进行拆迁改造。本文将对安陆开发区卓湾村
2023-05-23
miui 13开发版安卓11
MIUI是小米公司推出的基于Android系统的操作系统,它采用了苹果的平面化设计风格,支持更多的主题换肤和个性化设置,除了基本的通讯录、短信、音乐、拍照、闹钟等功能,还支持了小米生态链的产品,更加方便我们的生活。 MIUI 13是小米正在研发中的最新版本
2023-05-23
js开发安卓软件
JavaScript 不是一门直接用来开发安卓应用的编程语言。通常情况下,使用 Java 编程语言来开发安卓应用程序。然而,我们可以使用 JS 来开发 Android 应用的部分功能。在本文中,我们将介绍如何使用JS来开发 Android 应用的部分功能。
2023-05-23
40岁转行安卓开发
随着移动互联网的发展,安卓开发成为了一个越来越热门的行业。随着智能手机的普及,安卓应用的市场需求越来越大。所以,很多人选择转行安卓开发。即使在40岁,也没有必要放弃自己的梦想。下面,我们将介绍一些关于安卓开发的基础知识,以及如何在40岁时转行成为安卓开发者
2023-05-23
打包上线app安卓
打包上线安卓APP一般需要遵循以下步骤:1. 签名证书生成在打包时,需要对APP进行签名,以确保在传输安装的过程中不被篡改。因此,需要生成签名证书。可以使用Android Studio自带的密钥库工具(Keytool)生成证书,具体步骤如下:- 打开终端或
2023-04-28
安卓版app打包软件
Android应用程序打包分为两个阶段:第一阶段是使用Android SDK的工具创建应用程序并对其进行调试;第二阶段是应用程序的打包和签名。这 two 阶段通常都在Android Studio上进行,下面就是详细介绍。第一阶段 - 创建和调试 Andro
2023-04-28
安卓上开发app
安卓开发是指使用Java语言、开发工具和SDK等技术,在安卓操作系统平台上开发出应用程序的过程。下面将介绍一些安卓开发的原理和详细信息。1. 安卓应用程序的组成一般来说,一个完整的安卓应用程序由四个主要组成部分构成,即活动(Activity)、服务(Ser
2023-04-28
mac可以开发安卓app吗
当然可以!Mac 是一个非常流行且实用的平台,用于开发安卓应用程序。本文将为您解释在 Mac 上开发 Android 应用的原理以及提供详细的步骤教程。原理解释:安卓应用程序主要使用 Java(或 Kotlin)编写。在 Mac 系统中,您可以配置具有适当
2023-04-28
java转安卓app开发
Java转安卓App开发可以使用多种工具,比较常用的工具是Android Studio和React Native。Android Studio是一个官方的安卓开发工具,可用于开发任何类型的安卓应用程序,包括游戏、企业移动应用程序、多媒体应用程序等。使用An
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1