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


相关知识:
安卓11开发者选项怎么开启
Android 11是谷歌推出的最新操作系统,为了满足不同开发者的需求,在操作系统中内置了开发者选项。开发者选项提供了一系列的调试选项和性能调优设置,方便开发人员进行测试和优化。下面将详细介绍如何开启安卓11开发者选项。1. 打开设置首先,打开手机的设置应
2023-05-23
安卓10开发者模式在哪里
在 Android 10 中,开发者模式同样存在,其本质是在 Android 设备上为开发者提供了一些额外的选项和功能,以便更方便的进行调试和开发。下面将会详细介绍 Android 10 中的开发者模式。Android 10 中的开发者模式默认是隐藏的,需
2023-05-23
root安卓开发板
根据不同的手机厂商和设备生产商,设备的 root 的方式和操作也会因厂商而异。一般而言,root 是指获取 Android 系统下完全的管理员权限。这样,用户可以获得更多的系统权限,以便对设备进行更加自由、强大的控制和管理。然而,原生的 Android 系
2023-05-23
maui安卓开发
MAUI (Multi-platform App UI) 是微软推出的一款多平台应用程序开发工具箱,它为用户提供了一种编写跨平台应用程序的新方式。MAUI 在微软的 .NET 6 框架之上构建,可以使用 C# 和 XAML 等语言开发应用程序,支持多种操作
2023-05-23
java开发接口给安卓
Java开发接口给安卓是一种现代化的web开发方式。Java作为一种编程语言,由于其跨平台、高安全性、高稳定性以及高性能等优点,成为企业级应用开发的首选。而安卓作为具有全球市场占有率的移动操作系统,也有着广泛的需要与企业级应用交互的需求,因此Java开发接
2023-05-23
ios需要在开发者模式运行嘛安卓
iOS和Android都可以使用开发者模式,但它们的实现方式和具体功能是不同的。下面将分别介绍iOS和Android下的开发者模式。iOS开发者模式iOS的开发者模式被称为“Xcode模式”,它是一个开发者工具,用于编写、测试和分析iOS应用程序。Xcod
2023-05-23
14天学会安卓开发全部示例
第1天:简介在这个系列的教程中,我们会介绍Android的基础知识,以帮助您学习如何创建自己的Android应用程序。我们将介绍一些常用的工具和术语,并且使用Java编程语言来编写Android应用程序代码。第2天:设置开发环境在这个教程中,我们将讨论如何
2023-05-23
手把手教你制作安卓app小应用
制作安卓app小应用需要掌握以下知识点:1. Java编程语言基础2. 安卓开发平台基础知识3. 学会使用安卓软件开发工具4. 掌握安卓app的基本结构和组件以下是手把手教你制作安卓app小应用的详细步骤:1. 下载并安装Java Development
2023-04-28
安卓开发的app鸿蒙能用吗
当然可以!鸿蒙操作系统(HarmonyOS)是华为推出的一款面向智能设备的新一代操作系统。鸿蒙旨在为各种设备提供较高的链接性,并且经由跨平台的方式,使开发人员可轻松创建适用于多个设备的应用程序。对于安卓开发的app,鉴于鸿蒙系统和安卓系统在原理和结构宗旨方
2023-04-28
安卓app开发手册中文版
安卓应用开发手册(中文版) -- 原理与详细介绍概述安卓(Android)是谷歌公司开发的一个基于Linux的开源操作系统,专为触屏移动设备设计,如智能手机和平板电脑。本文将介绍Android开发的基本概念、环境搭建以及开发过程中所需掌握的核心技能。第一部
2023-04-28
基于安卓系统的app开发
基于Android系统的应用开发概述及详细介绍在当今技术时代,手机已经成为生活中不可或缺的一部分。在手机平台上,Android系统占据着巨大的市场份额。为此,学习基于Android系统的应用开发是非常重要和实用的。本文将详细介绍如何开发一个基于Androi
2023-04-28
万门大学APP已挂,万门官网已打不开,公司疑似倒闭,创始人疑似跑路
这是2022年又一家做教育app的平台倒闭跑路,可想而知教育行业已经到了何其险恶的地步,不说什么大环境,不说什么政策影响,不说什么一刀切,这家万门大学只是做职场和大学生就业教育的,并不涉及学科教育。 最令人不开心的是万门大学跑路之前推出了3600小时免费学习,狠狠的圈了一波,让学员缴纳1万甚至更多的费用购买套餐,承诺学习满3600小时就会退款。
2023-02-10
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1