热门标签 | 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安全漏洞



推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
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社区 版权所有