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


相关知识:
安卓12系统没有开发者选项
安卓系统的开发者选项是针对开发人员提供的一项调试和测试工具,它集成了一些高级调试选项,可以帮助开发人员更好地理解、分析和优化应用程序。但是,有些用户在使用安卓12系统时发现,开发者选项突然消失了,这是因为安卓12系统取消了开发者选项的默认显示。在之前的安卓
2023-05-23
安卓11新系统开发者选项在哪里找
安卓11是Google发布的最新操作系统,为了方便开发者进行调试和测试,Google在系统中提供了“开发者选项”这一功能。本文将介绍如何找到安卓11中的开发者选项以及其原理。一、找到开发者选项的方法1.打开设置应用:在手机或平板电脑上,打开应用抽屉,找到“
2023-05-23
安卓11开发者蓝牙怎么设置耳机音量
在Android 11中设置耳机音量主要包括以下两个步骤:1. 获取当前耳机音量2. 设置耳机音量下面将详细介绍如何进行操作。获取当前耳机音量首先,我们需要使用AudioManager类获取当前耳机的音量。获取方式为:```javaAudioManager
2023-05-23
eclips安卓开发手机
Eclipse是一款常用的集成开发环境(IDE),在Android开发中也是广泛使用的软件之一。本文将介绍Eclipse在Android开发中的原理和详细使用。一、Eclipse Android开发原理Eclipse是一款开源的Java集成开发环境,有着丰
2023-05-23
app安卓用什么语言开发
App是指手机应用软件,而安卓则是指Android操作系统,两者的结合成就了我们所熟知的“安卓App”。那么,安卓App是如何开发出来的呢?安卓App的开发需要使用Java语言和Android SDK工具包,以下是详细介绍。首先,让我们来介绍一下Java语
2023-05-23
2018安卓巴士开发者大会
2018年11月7日-8日,由安卓巴士主办、国内顶尖智能交通玩家齐聚一堂的“2018安卓巴士开发者大会”在北京如期而至。本次大会上,全球智能交通界的领袖士与一众从业人士共同探讨技术变革、新商业模式、用户需求等共性问题,促进行业发展,推进行业健康可持续发展。
2023-05-23
35岁大叔学安卓开发
安卓开发是一项非常具有前途的技能,随着智能手机的普及和移动互联网的不断发展,越来越多的人开始关注这个领域。如果你是一位35岁的大叔,但是想学习这个技能,那么本文将为您介绍安卓开发的基本原理以及学习路径。基础知识首先,作为一名安卓开发者,你需要掌握Java编
2023-05-23
安卓开发简单程序app
安卓开发简单程序App:Hello World示例在本教程中,我们将概述如何使用Android Studio创建一个简单的Android应用程序。我们将创建一个名为“Hello World”的基本应用,适合Android开发的初学者。开发环境:- 系统:W
2023-04-28
安卓开发app模板
在安卓开发中,使用模板可以帮助加快开发的速度和提高开发的效率。下面是一些常见的安卓开发app模板:1. 拉卡拉的hybrid模板:这个模板是基于React Native和Web View实现的,提供了聚合支付(包括银联、支付宝、微信)、H5页面展示、个人中
2023-04-28
安卓app是用什么语言开发
安卓APP的主要开发语言是Java和Kotlin。以下是它们的详细介绍:1. Java:Java是一种面向对象的编程语言,广泛用于开发安卓应用程序。安卓应用程序使用Java SDK(软件开发工具包)来编写,并使用Java的Android API(应用程序编
2023-04-28
安卓app开发手册中文版
安卓应用开发手册(中文版) -- 原理与详细介绍概述安卓(Android)是谷歌公司开发的一个基于Linux的开源操作系统,专为触屏移动设备设计,如智能手机和平板电脑。本文将介绍Android开发的基本概念、环境搭建以及开发过程中所需掌握的核心技能。第一部
2023-04-28
东莞安卓app定制开发多少钱
安卓APP定制开发的价格是根据客户要求定制的程度、功能模块的复杂程度、UI设计的工作量以及所需技术人员的工资等因素而定的。同时,不同的开发公司和开发人员,其服务和收费标准也有所不同。一般来说,相同的APP,在不同的定制公司中价格也相差很大。根据行业内基本的
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1