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不会停止该服务

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安全漏洞

android动态service,Android基础回顾之Service相关推荐

  1. android 动态contextmenu,Android成长日记-ContextMenu实现上下文菜单

    一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...

  2. android 动态label,Android仿抖音实现动态壁纸

    一.概述: 壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService.当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘 ...

  3. android 动态 dex,Android 动态加载dex

    首先如果仅仅是因为64K method的问题可以直接看这里DexGuard.Proguard.Multi-dex给出的解决方案. 本文主要讨论从编译层面,dex动态加载器选择层面以及安全层面讨论dex ...

  4. android动态开发,android开发实现动态壁纸

    释放双眼,带上耳机,听听看~! 代码中有用到两个接口 IWallpaperService mService; IWallpaperEngine mEngine; 我们可以看到该目录下面有三个aidl接 ...

  5. android+动态模糊效果,Android 动态高斯模糊效果教程

    写在前面 最近一直在做毕设项目的准备工作,考虑到可能要用到一个模糊的效果,所以就学习了一些高斯模糊效果的实现.比较有名的就是 FastBlur 以及它衍生的一些优化方案,还有就是今天要说的Render ...

  6. android 动态渐变,Android 动态修改渐变 GradientDrawable

    Android 绘图学习 1GradientDrawable 简介 以前的文章写过 Android中渐变实现方式 前面的文章 讲解了如何实现渐变类似LinearGradient,SweepGradie ...

  7. android 动态字幕,Android之如何用TextView实现滚动字幕的效果【跑马灯】

    TextView 实现滚动字幕效果[跑马灯效果]: android:ellipsize="marquee"//可滚动,star(头部),middle(中部),end(尾部) 超出显 ...

  8. android 动态contextmenu,Android ContextMenu的使用

    ContextMenu介绍: 假设一个View注冊了上下文菜单.那么当长按该View时便会弹出一个浮动菜单,来供选择下一步操作. 实现这个功能须要调用setOnCreateContextMenuLis ...

  9. android 动态contextmenu,Android中ContextMenu用法实例

    本文实例讲述了Android中ContextMenu用法.分享给大家供大家参考.具体如下: main.xml文件如下: Android:orientation="vertical" ...

最新文章

  1. oracle 中update多个字段
  2. eAccelerator(eacc)安装配置笔记
  3. 软件工程--团队作业4
  4. 《数据库原理与应用》(第三版)第12章 函数和游标 基础 习题参考答案
  5. unity声音组件AudioSource的使用
  6. 使用PXE+VNC方式安装CentOS 7
  7. POI读取Excel文件时,row.getCell(0).getStringCellValue()报错:数字转换异常
  8. linux配置git(一)安装git
  9. oracle 自动执行存储过程,oracle 自动执行存储过程
  10. opencv 读取视频、打开摄像头、写入视频文件
  11. flask报错 ValueError: Circular reference detected 问题解决
  12. QCPColorMap实现瀑布图
  13. 自学Java第二天 解决java不能输出中文问题
  14. 2022年茶艺师(中级)考试题库模拟考试平台操作
  15. git lfs官网翻译
  16. 在Fedora上安装NVIDIA驱动详细教程及解析
  17. ROS学习| navigation基本导航
  18. Crunchx--基于文法的字典生成器
  19. echarts全国地图只显示南海诸岛问题解决
  20. 科普:长度单位“米”是怎么得来的

热门文章

  1. Firefox 终于对退格键“下手”了!
  2. 我又踩坑了!如何为 HttpClient 请求设置 Content-Type 标头?
  3. 华为 HarmonyOS 2.0 全面升级,构建中国软件的“根”!
  4. 对标 PyTorch,清华团队推出自研 AI 框架“计图” | AI 技术生态论
  5. 疫时急速挑战,AI 落地大考
  6. IntelliJ IDEA 2019.3 正式发布,给我们带来哪些新特性?| CSDN 博文精选
  7. 一个程序员开始优秀的 3 种迹象
  8. 谷歌员工中位数年薪达 170 万元,却仍买不起房!
  9. 首款“印度制造”的微处理器 AJIT 面世!
  10. “边缘计算将吞掉云计算!”