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


相关知识:
安卓 开发 社区
Android开发社区是一个针对安卓开发人员的在线交流平台,主要是为了方便安卓开发人员互相交流和分享经验、技术以及社区资源等。Android开发社区可以为安卓开发人员提供以下几方面的帮助:1. 提供资讯和教程Android开发社区可以提供最新的安卓开发资讯
2023-05-23
安徽安卓系统app定制开发哪家好一点
在安卓系统的应用开发中,定制开发是一种非常有效的方式。因为不同的客户需求各不相同,只有进行定制开发才能够满足客户的需求。而在安徽地区,如何选择一家好的安卓系统app定制开发公司也是备受关注的话题。本篇文章将会介绍两家在安徽地区比较好的安卓系统app定制开发
2023-05-23
vscode开发安卓
Visual Studio Code(简称VS Code)是一款由微软开发的轻量级代码编辑器,可用于多种编程语言的开发。尽管VS Code主要用于Web开发,但是通过安装插件可以支持Android开发。下面是VS Code开发Android的原理介绍。首先
2023-05-23
vivoxplay5安卓手机开发者选项
在安卓系统中,开发者选项是一个非常重要而又有用的功能。vivo Xplay5也不例外,它也拥有这一功能。本文将详细介绍vivo Xplay5安卓手机开发者选项的原理和功能。开发者选项是一个在安卓系统中开启隐藏功能的选项,它包含了诸如调试模式、USB调试、布
2023-05-23
reactnative 安卓开发
React Native 是 Facebook 推出的一款跨平台开发框架,使用 JavaScript 和 React 构建原生应用。它的主要优点在于开发效率高、跨平台支持好,并且可以直接调用 Android 或 iOS 的原生组件。 下面我将会详细介绍 R
2023-05-23
qt开发安卓入门
Qt是一种流行的C++应用程序开发框架,可用于构建跨多个平台的丰富图形用户界面和应用程序。Qt提供了许多功能强大的API和工具,使开发人员可以快速构建各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式应用程序。在本文中,我们将介绍如何在Qt中开发A
2023-05-23
qt5
Qt是一个跨平台、用于开发图形用户界面以及移动应用的应用程序框架。Qt自身包含了很多基础库,如网络、多媒体、SQL等,还有许多专注于一些方面的模块库,如OpenGL、Webkit等,尤其在5.14版本中,增加了对安卓系统的支持,该版本主要在以下几个方面进行
2023-05-23
ios和安卓开发使用的什么框架
iOS和Android都有其独特的开发框架,下面我们来详细介绍一下。iOS开发框架:1. Cocoa Touch框架:Cocoa Touch是基于Objective-C的iOS应用程序开发框架,包含了UIKit,Foundation,Core Data等多
2023-05-23
delphixe10安卓开发连接sql
DelphiXE10是一款非常流行的集成开发环境,该集成开发环境可以用于开发各种不同类型的应用程序。其中,Android开发是其中的一个非常热门的选项。在使用DelphiXE10进行Android开发的时候,连接SQL Server是非常常见的需求,因此本
2023-05-23
30岁了学习安卓开发
随着智能手机的普及,安卓操作系统也成为了目前全球最流行的操作系统之一。在安卓王国中,有大量的应用程序和游戏可以满足人们的不同需要,因此安卓开发已成为了一项非常有前途的技能。即使你已经步入了30岁,但在安卓开发领域,你仍然能够取得很大的进步和成功。安卓开发的
2023-05-23
自己开发安卓app要钱吗
当我们谈论开发安卓应用程序的成本时,我们可以将其划分为三个主要部分:开发工具的成本、学习成本和发布成本。让我们一一了解这些费用。1. 开发工具成本安卓开发主要使用的免费工具是 Android Studio,这是Google提供的官方集成开发环境(IDE)。
2023-04-28
python 安卓app开发环境
Python 是一种面向对象的高级编程语言,被广泛应用于科学计算、Web开发、机器学习、人工智能等方面。Python 可移植性强,可在几乎所有操作系统中运行,也可以用于 Android 应用程序的开发。安卓应用程序本质上是运行在安卓操作系统上的 Java
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1