今天小编给大家分享一下AndroidService怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。其实启动service和启动Activity是很相似的,都是APP通知系统侧,由系统侧完成的整个流程。无论是Activity,还是service,还是Application,都继承自Context的抽象类,所以可以使用Context的各种功能,就比如这了要介绍的启动前台/后台service。Context在安卓中,使用了一种典型的代理模式,我们调用的startService或者startForegroundService方法,最终都会委托给ContextImpl中的startService和startForegroundService来处理的。我们就来看下ContextImpl中的这两个方法:果然和我猜测的差不多,无论前台还是后台启动,其实最终都会走到一个方法中,只是配置参数的区别而已。最终都会走执行startServiceCommon方法。该方法中,通过binder通知系统的AMS完成对应的service的启动操作:接下来,我们就看下系统侧是如何处理Service启动流程的。系统侧的处理我主要分为3块来讲:1.系统接受APP侧的通知并转发2.系统侧委托ActiveServices负责完成的处理流程3.收到APP侧执行完成的回调,进行收尾操作APP侧持有system_server进程的binder,上面讲到,它会通过binder方法startService完成对系统侧的通知。所以AMS的startService会收到这个通知。我们看下代码,发现AMS会把整个service的逻辑全部交由ActiveServices来处理,代码如下:系统代码startServiceLocked方法中,代码虽然很长,但是却遵循着一个不变的宗旨:位语句,即前面处理各种异常的分支逻辑,把核心流程留到方法的最终来处理。所以我们直接看startServiceLocked方法的最后一部分即可:startServiceInnerLocked方法中,处理逻辑也是比较简单的,最终会交给bringUpServiceLocked方法来进行处理。而bringUpServiceLocked方法中则最终会交给realStartServiceLocked完成整个流程。好像系统代码都喜喜欢用realStart,Activity启动的流程中也有一个方法叫realStartActivity。realStartServiceLocked方法中,我们总结为三个流程:1.bumpServiceExecutingLocked,启动超时检查。2.thread.scheduleCreateService通知APP一侧去创建Service。3.sendServiceArgsLocked通知APP执行Service的生命流程。一般情况下,APP侧会收到系统侧发过来两种类型的通知,第一种:创建Service的任务通知第二种:执行Service生命流程的通知,通知Service执行onStartCommand方法。ApplicationThread接受通知并创建Service系统侧持有APP侧的binder,会通过scheduleCreateService这个binder方法通知APP一侧进行相应的操作。而APP侧,完成这个工作免费云主机域名接收的就是ApplicationThread中的scheduleCreateService方法。该方法收到通知后,通过handler切换到主线程处理:handle中,会切换到主线程执行ActivityThread的handleCreateService方法。主要执行了如下的几段逻辑:1.如果是首次创建App进程的话,则需要重新创建Application;2.创建Service对象;3.调用service的attach方法进行关联;4.调用service的onCreate生命周期方法;5.创建完成后,通过serviceDoneExecuting通知系统侧创建完成。ApplicationThread接受通知并执行Service的生命流程同样的,这里完成接受的是,仍然是ApplicationThread中的方法。这个流程中的接受方法是scheduleServiceArgs方法。ApplicationThread中,收到通知后,通过handler把任务转交到主线程。接下来handler中切换到主线程会执行ActivityThread的handleServiceArgs方法。handleServiceArgs方法主要会完成以下几件事:1.找到对应的service,调用起onStartCommand方法;2.通知系统侧回调完成。以上就是“AndroidService怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
相关推荐: MySQL8.0.28数据库安装和主从配置的方法是什么
这篇文章主要免费云主机域名介绍“MySQL8.0.28数据库安装和主从配置的方法是什么”,在日常操作中,相信很多人在MySQL8.0.28数据库安装和主从配置的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL8…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。