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开发者模式是安卓系统中的一个高级设置选项,它允许开发人员访问和修改设备的一系列高级设置,包括调试选项、USB调试、进程限制和性能监视等。要激活开发者模式,您需要按照以下步骤进行操作:1. 打开设备设置2. 在“设备信息”下找到“版本号”并连续点击七次
2023-05-23
ios15开发者预览版能升级公测版吗安卓
iOS 15是苹果公司最新的移动操作系统,是针对iPhone和iPad开发的。当前,iOS 15还处于开发者预览版阶段,即只有开发者才能访问并下载它。但是,随着iOS 15的公测版的发布,普通用户也可以升级到新的操作系统。那么,iOS 15开发者预览版能否
2023-05-23
c做安卓开发
安卓开发是近年来互联网领域中的热门方向之一,而c语言作为一门经典的计算机编程语言,在安卓开发中也有广泛的应用。本文将从安卓开发的背景和基础知识出发,介绍c语言在安卓开发中的应用和原理。安卓开发的背景和基础知识安卓是一种基于Linux内核的开放源代码操作系统
2023-05-23
arm开发板如何安装安卓系统
ARM开发板作为一款高性能嵌入式开发平台,适用于各种物联网设备、智能家居、自动化控制等场景,因其强大的性能特点和强大的扩展性得到了广泛运用。想让ARM开发板运行更加灵活和高效,安装操作系统是非常必要的。本文将详细介绍ARM开发板如何安装安卓系统。一、准备工
2023-05-23
2018年安卓开发
安卓开发指的是在安卓操作系统上进行应用程序开发及相关技术实现的工作。安卓是一种基于Linux操作系统的移动设备平台,其优点在于开放性、便携性等,这也是它成为当前最受欢迎的移动操作系统之一的原因。安卓应用程序开发技术主要是基于Java语言进行的。Java语言
2023-05-23
2021 安卓开发机
2021年的安卓开发机与以往相比,除了基本的硬件配置要求外,还需要考虑一些新的技术趋势和开发需求。在本文中,我们将介绍安卓开发机的基本原理和详细配置,以及一些推荐的工具和开发技巧,帮助开发者了解如何搭建一个完美的安卓开发环境。一、安卓开发机的基本原理安卓开
2023-05-23
2018 安卓开发板
安卓开发板通常指的是基于安卓系统的开发板,是一种嵌入式开发板,也是一种针对开发人员的硬件平台,可用于开发移动设备、智能家居、机器人等各种智能设备。本文将对2018年主流的安卓开发板进行原理性或详细介绍。一、什么是安卓开发板?安卓开发板是一款基于安卓系统的嵌
2023-05-23
安卓开发时间管理app
安卓开发时间管理app可以帮助用户记录和管理他们的时间,使他们更有效率地完成任务。以下是一个简单的开发过程:1. 数据库设计:在开发时间管理app之前,我们需要设计一个数据库来存储用户的任务和时间。可以使用SQLite数据库,其中包括列如任务名称、开始时间
2023-04-28
安卓开发app优缺点
安卓开发是指使用Java语言编写应用程序并在安卓平台上运行的过程。以下是安卓开发app的优缺点:优点:1. 巨大的市场:安卓智能手机在全球范围内享有巨大的市场份额,这意味着您的应用程序具有很大的受众数量。2. 易于定制: 安卓开发平台具有强大的定制能力,可
2023-04-28
安卓app开发毕业答辩专用
安卓App开发是一门非常重要的技术,随着智能手机的普及,越来越多的人开始使用手机应用程序。Android操作系统相对于其他操作系统较容易上手,开发成本较低,拥有较广阔的用户群体。本文将介绍安卓App开发的基本原理和详细流程。一、安卓应用程序基本原理Andr
2023-04-28
基于安卓的app开发外文文献综述
以下是基于安卓的app开发的外文文献综述:1. "Android Application Development" by Wei-Meng Lee该书为入门级别的教程,介绍了如何使用Java和Android SDK来开发Android应用程序。该书主要重点
2023-04-28
傻瓜式开发安卓app
在本教程中,我们将介绍如何采用傻瓜式方法开发一个简单的安卓应用。我们将使用MIT App Inventor平台,这是一个用于创建无需编写代码的原型安卓应用的图形化编程工具。如果你是编程初学者,这个教程就是为你准备的!一、准备工作1. 访问 MIT App
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1