潍坊市网站优化,广告投放代理商加盟,如何与别的网站做友情链接,seo排名赚app多久了service:
startService启动过程分析 - Gityuan博客 | 袁辉辉的技术博客 在整个startService过程#xff0c;从进程角度看服务启动过程
Process A进程#xff1a;是指调用startService命令所在的进程#xff0c;也就是启动服务的发起端进程#xff0c;比如点击桌面App图标…service:
startService启动过程分析 - Gityuan博客 | 袁辉辉的技术博客 在整个startService过程从进程角度看服务启动过程
Process A进程是指调用startService命令所在的进程也就是启动服务的发起端进程比如点击桌面App图标此处Process A便是Launcher所在进程。system_server进程系统进程是java framework框架的核心载体里面运行了大量的系统服务比如这里提供ApplicationThreadProxy简称ATPActivityManagerService简称AMS这个两个服务都运行在system_server进程的不同线程中由于ATP和AMS都是基于IBinder接口都是binder线程binder线程的创建与销毁都是由binder驱动来决定的每个进程binder线程个数的上限为16。Zygote进程是由init进程孵化而来的用于创建Java层进程的母体所有的Java层进程都是由Zygote进程孵化而来Remote Service进程远程服务所在进程是由Zygote进程孵化而来的用于运行Remote服务的进程。主线程主要负责Activity/Service等组件的生命周期以及UI相关操作都运行在这个线程 另外每个App进程中至少会有两个binder线程 ApplicationThread(简称AT)和ActivityManagerProxy简称AMP当然还有其他线程这里不是重点就不提了。 图中涉及3种IPC通信方式Binder、Socket以及Handler在图中分别用3种不同的颜色来代表这3种通信方式。一般来说同一进程内的线程间通信采用的是 Handler消息队列机制不同进程间的通信采用的是binder机制另外与Zygote进程通信采用的Socket。
启动流程
Process A进程采用Binder IPC向system_server进程发起startService请求system_server进程接收到请求后向zygote进程发送创建进程的请求zygote进程fork出新的子进程Remote Service进程Remote Service进程通过Binder IPC向sytem_server进程发起attachApplication请求system_server进程在收到请求后进行一系列准备工作后再通过binder IPC向remote Service进程发送scheduleCreateService请求Remote Service进程的binder线程在收到请求后通过handler向主线程发送CREATE_SERVICE消息主线程在收到Message后通过发射机制创建目标Service并回调Service.onCreate()方法。
到此服务便正式启动完成。当创建的是本地服务或者服务所属进程已创建时则无需经过上述步骤2、3直接创建服务即可。 startService的生命周期为onCreate, onStartCommand, onDestroy,流程如下图