android动态service,Android基础回顾之Service
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相关推荐
- android 动态contextmenu,Android成长日记-ContextMenu实现上下文菜单
一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...
- android 动态label,Android仿抖音实现动态壁纸
一.概述: 壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService.当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘 ...
- android 动态 dex,Android 动态加载dex
首先如果仅仅是因为64K method的问题可以直接看这里DexGuard.Proguard.Multi-dex给出的解决方案. 本文主要讨论从编译层面,dex动态加载器选择层面以及安全层面讨论dex ...
- android动态开发,android开发实现动态壁纸
释放双眼,带上耳机,听听看~! 代码中有用到两个接口 IWallpaperService mService; IWallpaperEngine mEngine; 我们可以看到该目录下面有三个aidl接 ...
- android+动态模糊效果,Android 动态高斯模糊效果教程
写在前面 最近一直在做毕设项目的准备工作,考虑到可能要用到一个模糊的效果,所以就学习了一些高斯模糊效果的实现.比较有名的就是 FastBlur 以及它衍生的一些优化方案,还有就是今天要说的Render ...
- android 动态渐变,Android 动态修改渐变 GradientDrawable
Android 绘图学习 1GradientDrawable 简介 以前的文章写过 Android中渐变实现方式 前面的文章 讲解了如何实现渐变类似LinearGradient,SweepGradie ...
- android 动态字幕,Android之如何用TextView实现滚动字幕的效果【跑马灯】
TextView 实现滚动字幕效果[跑马灯效果]: android:ellipsize="marquee"//可滚动,star(头部),middle(中部),end(尾部) 超出显 ...
- android 动态contextmenu,Android ContextMenu的使用
ContextMenu介绍: 假设一个View注冊了上下文菜单.那么当长按该View时便会弹出一个浮动菜单,来供选择下一步操作. 实现这个功能须要调用setOnCreateContextMenuLis ...
- android 动态contextmenu,Android中ContextMenu用法实例
本文实例讲述了Android中ContextMenu用法.分享给大家供大家参考.具体如下: main.xml文件如下: Android:orientation="vertical" ...
最新文章
- oracle 中update多个字段
- eAccelerator(eacc)安装配置笔记
- 软件工程--团队作业4
- 《数据库原理与应用》(第三版)第12章 函数和游标 基础 习题参考答案
- unity声音组件AudioSource的使用
- 使用PXE+VNC方式安装CentOS 7
- POI读取Excel文件时,row.getCell(0).getStringCellValue()报错:数字转换异常
- linux配置git(一)安装git
- oracle 自动执行存储过程,oracle 自动执行存储过程
- opencv 读取视频、打开摄像头、写入视频文件
- flask报错 ValueError: Circular reference detected 问题解决
- QCPColorMap实现瀑布图
- 自学Java第二天 解决java不能输出中文问题
- 2022年茶艺师(中级)考试题库模拟考试平台操作
- git lfs官网翻译
- 在Fedora上安装NVIDIA驱动详细教程及解析
- ROS学习| navigation基本导航
- Crunchx--基于文法的字典生成器
- echarts全国地图只显示南海诸岛问题解决
- 科普:长度单位“米”是怎么得来的
热门文章
- Firefox 终于对退格键“下手”了!
- 我又踩坑了!如何为 HttpClient 请求设置 Content-Type 标头?
- 华为 HarmonyOS 2.0 全面升级,构建中国软件的“根”!
- 对标 PyTorch,清华团队推出自研 AI 框架“计图” | AI 技术生态论
- 疫时急速挑战,AI 落地大考
- IntelliJ IDEA 2019.3 正式发布,给我们带来哪些新特性?| CSDN 博文精选
- 一个程序员开始优秀的 3 种迹象
- 谷歌员工中位数年薪达 170 万元,却仍买不起房!
- 首款“印度制造”的微处理器 AJIT 面世!
- “边缘计算将吞掉云计算!”