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


相关知识:
安卓8
安卓8.0开发者选项是一个非常重要的功能,可以让开发者对手机进行深度定制和优化。开启开发者选项后,我们可以进行USB调试、CPU使用率实时监控、查看GPU使用情况等等操作。那么安卓8.0开发者选项在哪里呢?下面我会详细介绍。一、开启方式1.在设置中进入“关
2023-05-23
安卓11开启开发者
安卓11是谷歌公司最新推出的安卓操作系统。它的公测版本已经发布了,并且已经可以通过 OTA 或者手工刷机的方式进行升级。对于很多安卓开发者来说,升级到安卓11是很有必要的,因为它带来了很多新的特性和功能。在升级到安卓11之后,我们需要开启开发者模式,以便于
2023-05-23
安卓 开发 gps
GPS(Global Positioning System)是全球卫星定位系统的缩写,通过一组卫星网络,为地球上的所有地方提供精确的定位信息。在Android开发中,可以借助GPS定位手机的位置信息,以及获取与位置相关的一些附加信息,如速度、海拔高度等。本
2023-05-23
xavier开发版安卓
Xavier开发板是一款针对人工智能应用而设计的开发板,它由NVIDIA公司开发。这个开发板被广泛用于智能驾驶、智能机器人、自然语言处理、深度学习模型训练和推理等领域。其中,它在安卓系统上应用得非常广泛,本文将详细介绍Xavier开发版在安卓系统中的应用原
2023-05-23
uniapp可以在安卓开发环境上运行吗
Uniapp是一款非常流行的小程序开发框架,它可以同时支持安卓开发和iOS开发。对于安卓开发人员,运行Uniapp非常简单,只需要了解一些基础知识和原理即可。让我们来详细介绍一下Uniapp在安卓开发环境下的运行原理。Uniapp能够在安卓环境上运行的原理
2023-05-23
python与安卓开发
Python是一种解释型高级编程语言,易于学习和使用,适合快速开发各种应用程序,包括网站开发、数据科学、机器学习等等。安卓开发是指使用Java等编程语言和Android SDK开发安卓应用程序。本文将介绍Python在安卓开发中的应用原理和详细介绍安卓开发
2023-05-23
java和kotlin开发安卓的区别
Java和Kotlin都是用于Android开发的编程语言,但它们在语言特性和开发体验方面存在着区别。本文将从语法、特性和性能等方面对Java和Kotlin的异同进行介绍。1. 语言特性Java是一种面向对象的编程语言。Android开发采用的是Java语
2023-05-23
hi交友安卓版开发
Hi交友是一款非常流行的社交软件,主要针对年轻群体,追求简单、美观、实用的产品。Hi交友的用户可通过APP发送聊天信息,分享照片等功能,丰富了用户间的交流体验。对于开发一款Hi交友安卓版的开发者来说,首先需要了解安卓开发的基础知识和开发流程,熟悉常用的开发
2023-05-23
0基础开发安卓app套件
开发一款 Android 应用程序并不需要有非常深入的编程知识,而是可以使用一些已经设计好的,易于使用的应用程序开发套件 (SDK)来帮助您完成制作的过程。下面是我们可以使用的一些 Android 开发工具和服务:1. Android StudioAndr
2023-05-23
安卓app封装源码apk
安卓app封装源码apk是将原始安卓app的源代码打包成一个APK文件,使其可以安装和运行于目标设备。下面介绍一下封装APK的原理和详细过程。1. 原理Android应用程序是使用Java编写的,编译后生成的dalvik字节码通过dx工具转换为dex字节码
2023-04-28
基于安卓的音乐app开发
开发一个基于安卓平台的音乐app,其基本的原理是使用Android SDK提供的MediaPlayer或ExoPlayer来播放音频文件,并结合UI控件和Java或Kotlin语言编写程序,实现音乐播放器的基本功能。具体实现步骤如下:1. 导入MediaP
2023-04-28
2023年企业再开发移动APP还有机会嘛?
2023年企业再开发移动APP还有机会嘛? 作为当下主流的营销工具,移动应用已成为企业竞争的必备利器,它与微信同样在移动营销中扮演着越来越关键的角色。如今大部分企业已经认识到企业移动应用和为微信2者互为补充,这关系到企业在未来几年的移动互联网市场中能否顺利发展,所以企业移动应用和微信营销两手抓是当前企业营销工作的重点。
2023-02-10
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1