热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android动态service,Android基础回顾之Service

Service四大组件之一,是Android的一种机制,服务是运行在主线程上的,没有界面1.service和Thread的区别和场景Thr

Service

四大组件之一,是Android的一种机制,服务是运行在主线程上的,没有界面

1.service和Thread的区别和场景

Thread:

程序执行的最小单元,它是分配CPU的基本单位。

生命周期:新建-就绪-运行-死亡-阻塞

缺点:无法控制,当activity关闭之后不再持有thread,activity将无法控制thread

Service:

是Android的一种机制,由系统进程托管,服务是运行在主线程上的,不可以进行耗时操作

生命周期:onCreate-onStart-onDestroy-onBind-onUnbind

startService之后,onCreate只会调用一次,onstartCommand调用次数与startService调用次数相同

stopService会调用onDestroy方法,一个activity被start又被bind之后,在没有解绑的前提下,stopService不会停止该服务

277a1bd7605b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

service生命周期.png

2.Service和IntentService

谷歌官方不建议在Service中编写耗时的逻辑和操作,否则会引起ANR

IntentService是继承自Service并处理异步请求的一个类;

IntentServcie内部有一个工作线程HandlerThread来处理耗时操作,IntentService完成之后会自动停止;

IntentService内部是通过消息的方式发送给HandlerThread的,然后由Handler中的Looper来处理消息;

IntentService后台任务执行时顺序的,当有多个任务时,这些任务会按照调用顺序依次执行,完成之后自动停止

3.启动服务和绑定服务

1.先绑定服务后启动服务:绑定服务会转为启动服务运行状态,如果绑定的activity销毁,服务会继续运行

2.先启动服务后绑定服务:服务不会转为绑定服务状态,会和Activity绑定,但是activity销毁,会按启动服务生命周期走

启动服务的优先级比绑定服务高

服务在其托管进程的主线程中运行(UI线程),如果要执行耗时操作,需在子线程中运行

4.Parcelable和Serializable

序列化:内存中对象-->磁盘

反序列化:磁盘中对象-->内存

Serializable是java提供的序列化接口,Parcelable是安卓特有的,效率上,Parcelable强于Serializable(主要是在内存开销上)

组件中(内存中)传递数据,推荐使用Parcelable,如果序列化到存储设备,推荐Serializable

Serializable:

使用:实现Serializable接口

特点:内存开销大

Parcelable

使用:实现Parcelable接口,需要添加静态成员变量,写的顺序和读的顺序要一致

缺点:内存开销小,代码实现麻烦

5.AIDL

进程间通信(IPC)机制,AIDL是服务端和客户端都认可的接口

1.创建AIDL:实体对象,新建AIDL文件,make工程

2.服务端:新建Service,创建binder对象,定义方法

3.客户端:实现ServiceConnection,BindService

6.广播接收器,动态注册于静态注册区别

广播接收器运行在UI线程,不能做耗时操作

为什么要在onResume中注册广播,在onPause中注销广播?

防止内存泄漏,onpause一定会执行,当系统内存紧张时,系统可能会回收 activity,而activity的onstop和ondestroy不一定会被执行

使用方式:静态,在清单文件中通过标签声明;动态,在代码中调用Context.registerReceiver

特点:静态,常住进程中,不受组建生命周期影响;动态,受组件生命周期影响

应用场景:静态,时刻监听广播;动态,需要在特定时刻接收广播

7.webView安全漏洞



推荐阅读
  • 本文介绍了Java中的com.sun.codemodel.JBlock._continue()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
author-avatar
tuigone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有