安卓8
Android 8.0,也被称为Android Oreo,是谷歌推出的最新的操作系统。它拥有许多新的功能和改进,包括改进的通知系统、画中画模式、自适应图标等等。在本文中,我们将详细介绍Android 8.0的开发过程和原理。1. 系统架构Android 8.0的架构与以往版本相似,包括以下四个主要组...
2023-11-05 围观 : 2次
在安卓系统开发过程中经常会涉及到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
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 8.0,也被称为Android Oreo,是谷歌推出的最新的操作系统。它拥有许多新的功能和改进,包括改进的通知系统、画中画模式、自适应图标等等。在本文中,我们将详细介绍Android 8.0的开发过程和原理。1. 系统架构Android 8.0的架构与以往版本相似,包括以下四个主要组...
Vue.js 是一款轻量级的前端框架,它可以帮助开发者构建复杂的单页应用程序(SPA)和移动应用程序。在现代Web应用程序中,移动应用程序已经成为了一个非常重要的方向,而 Vue.js 可以成为一个很好的选择。在这篇文章中,我们将了解如何使用 Vue.js 来构建一个移动应用程序。## 1. Vue...
Python是一种高级编程语言,由于其简单易学和强大的功能而非常受开发人员的喜爱。很多人都想着用Python来开发安卓应用程序。Python与安卓似乎并不协调,因为Android是一个基于Java编程语言的平台,并且不支持Python的本地执行。但是,Python开发安卓还是有多个解决方案的。在本文...
Procreate是一款出色的数字绘画和插图应用程序,原本只能在iOS设备上运行。许多人想知道为什么Procreate没有在Android上发布版本。虽然Procreate团队从未公开说明为什么他们没有开发安卓版本,但可以从几个因素中找到答案。第一个因素是安卓设备的多样性。与苹果公司的iOS设备相比...
在现今互联网时代,移动端应用越来越受到人们的关注,但是建立一个自己的APP又涉及到开发成本高、维护难度大等问题。针对这个问题,目前市面上出现了一些可以将Web技术做出来的一个APP封装工具,可以将H5页面封装成APP应用程序。1. 原理APP封装的原理就是将H5页面进行封装,通过一个容器去承载H5页...