Service精辟总结+理解(精)初级+中级
首先、我们来看下下面的流程图:
======
以上是两种生命周期,那我先不讲它们怎么实现。
首先写个类继承Service
public class Dujinyang extends Service {
int myStartMode; // indicates how to behave if the service is killed
IBinder myBinder; // interface for clients that bind
boolean myAllowRebind; // indicates whether onRebind should be used
@Override
public void onCreate() {
// The service is being created
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The service is starting, due to a call to startService()
return mStartMode;
}
@Override
public IBinder onBind(Intent intent) {
// A client is binding to the service with bindService()
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
// All clients have unbound with unbindService()
return mAllowRebind;
}
@Override
public void onRebind(Intent intent) {
// A client is binding to the service with bindService(),
// after onUnbind() has already been called
}
@Override
public void onDestroy() {
// The service is no longer used and is being destroyed
}
}
---那我们可以看到的是,服务的生命周期很简单,里面包含了2个启动方式的生命周期,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法。
---这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
这2种启动模式,执行着上图的生命周期,只是启动的时候调用下面的2种不同方式便可。
1。startService()
2。bindService()
=========================================================================
本地服务 Local Service 用于应用程序内部。
--》调用Context.startService()启动,以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。值得一提的是: 不论你调用了多少次startService()方法,只需要调用一次stopService()就可以停止服务了。 (用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。)
远程服务 Remote Service 用于android系统内部的应用程序之间。
它通过自己定义并暴露出来的接口进行程序之间的操作。客户端建立一个到服务对象的连接,并通过这个连接来调用服务。这个连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭,就像AIDL。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
(可被其他应用程序复用,调用已有的即可,就像第三方的应用)。
1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
2。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
---附: 官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。
有4点:
1. 如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。
2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.
3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。
4. 如果service可以使用startForeground(int, Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。
如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。
Service初涉 本节开始我们继续来学习Android中的第二个组件:Service(服务),开始本节内容! 1.线程的相关概念 在开始学习Service之前我们先来了解下线程的一些概念! 1)相关概念: 程序:为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码) 进程:运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配一段内存空间!程序的依次动态执行,经历代码的加载,执行,执行完毕的完整过程! 线程:比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行,线程由程序负责管理,而进程则由系统进行调度! 多线程的理解:并行执行多个条指令,将CPU
前端培训-中级阶段(25)-Web Socket网络编程 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 这块内容是我早就想下手的,但是因为之前服务没跑起来。所以文章没写成。今天经过一下午,终于鼓捣好了demo地址
K8S自己动手系列 - 2.4 - Service 上个实验2.3 – PV & PVC,我们将wordpress+mysql的Deployment绑定PVC,并成功将mysql的数据保存才PV存储卷上。 但是mysql作为数据库应用,当水平扩展后,就是多个独立的数据库实例,数据彼此分离,导致应用在多个实例间的状态不一致,那么这个问题如何解决呢?
奥特曼超人 KARL-Dujinyang-奥特曼超人。作者目前任职于银狐、泡椒游戏公司,曾任职腾为CTO,CSDN技术专家,曾创办过创业go、造梦工厂、米奇云,万能孵化器等,领域涉及逆向安全专家以及全栈工程师,作者目前出书中。
相关文章
- javaWeb学习总结(4)- HttpServletResponse
- python爬虫知识点总结(四)Requests库的基本使用
- Web APP开发技巧总结
- 职场经验:我理解的测试开发与实践总结——初始篇
- PHP开发安全问题总结
- 【JAVA】对static修饰符的入门理解(不断总结,更新中......)。
- 网易面试总结——面试案例1~面试案例4
- 深入理解Java内存模型(七)——总结
- 后端转前端系列之js易错点总结
- C#操作Excel总结
- Nginx 笔记与总结(5)访问日志管理:计划任务 + 日志切割
- stm32读写sd卡代码解析和调试总结
- 对Java Serializable(序列化)的理解和总结
- 《深入理解Scala》——第1章,第1.5节总结
- 《C++ Primer Plus(第6版)中文版》——1.5 总结
- 《HTML5移动应用开发入门经典》—— 2.7 总结
- 华为防火墙反病毒(个人思绪总结)
- 暂时性死区TDZ理解与总结
- 计算机网络常见面试题总结(转)
- cakephp单元测试断言方法总结
- 【Verilog基础】CDC跨时钟域问题,个人理解总结(上)(亚稳态、数据收敛解决方案)
- Retrofit三步理解之中的一个 ------------------ Retrofit的简单使用总结
- Eclipse、Tomcat、Spring3等使用过程的一些配置、错误等的总结记录
- 【基础巩固】详细总结对数组的理解
- vue造轮子,封装组件库-主要前置知识与总结
- Java多线程问题总结(上)