Android四大组件之Service之IntentService

2024-02-14 19:58

本文主要是介绍Android四大组件之Service之IntentService,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、IntentService的含义

        异步的,会自动停止的服务。

二、IntentService和service的区别

        service服务默认是运行在主线程中的,如果直接在服务中处理一些耗时的逻辑,就可能会出现ANR,所以我们一般都在服务的具体方法里开启一个新的线程去处理具体的逻辑,然后,这种类型的服务一旦启动后,就会一直运行,要想停止服务就得调用stopSeft()

然后Android专门提供了IntentService来简单的创建异步,自动停止的服务。

三、IntentService的使用

public class MyIntentService extends IntentService {public MyIntentService() {super("name");Log.d("Kathy", "Constructor");}@Overridepublic void onCreate() {super.onCreate();Log.d("Kathy", "onCreate()" + " ,Thread Name = " + Thread.currentThread().getName());}@Overrideprotected void onHandleIntent(@Nullable Intent intent) {Log.d("Kathy", intent.getStringExtra("data") + " ,Thread Name = " + Thread.currentThread().getName());try {Thread.sleep(30000);} catch (InterruptedException e) {e.printStackTrace();}}@Overridepublic void onDestroy() {super.onDestroy();Log.d("Kathy", "onDestroy()");}
}

public class IntentServiceDemoActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_intent_service_demo);Intent intent = new Intent(this,MyIntentService.class);intent.putExtra("data","Kathy");startService(intent);}
}

结果:

 结果分析:可以看到在onHandleIntent执行了异步耗时操作,而且自动停止了服务。

四、原理分析

 进来一个任务就会走onStartCommand()-->onStart(),就会往handler发一个消息,把任务信息带过去,在handler的handleMessage中走我们复写的onHandleIntent()处理任务。执行完onHandleIntent(),就会stopSelf(msg.arg1)。

这篇关于Android四大组件之Service之IntentService的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709448

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四