日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Service 形式分类

發(fā)布時(shí)間:2025/3/15 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Service 形式分类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
除去熟悉的ams、pms、wms之外,系統(tǒng)中還具有各式各樣形形色色的service,同樣作為service,其啟動(dòng)形式上有很大差別

(一)由SystemService和SystemServiceManager控制

SystemService作為一個(gè)運(yùn)行在SystemServer的基類,為用戶需要實(shí)現(xiàn)的service提供了一套生命周期,就跟Activity類似的一套周期,需要用戶override部分生命周期函數(shù)來保證正常工作

onStart():讓service跑起來,跑起來之后需要調(diào)用publishBinderService將service注冊(cè)到ServiceManager(本質(zhì)上就是通知servicemanager來add這樣一個(gè)service)

onBootPhase(int):這個(gè)函數(shù)應(yīng)該是systemserver在啟動(dòng)的時(shí)候會(huì)多次調(diào)用,參數(shù)代表當(dāng)前啟動(dòng)進(jìn)行到了什么階段,用戶定義的service針對(duì)各個(gè)階段需要做怎樣的處理或者是不做任何處理

例子:mount service中,當(dāng)phase處于PHASE_ACTIVITY_MANAGER_READY,也就是Activitymanager準(zhǔn)備就緒之后,mount service就要做這步操作

@Overridepublic void onBootPhase(int phase) {if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {mMountService.systemReady();}}

這類繼承了SystemService的類,很容易能夠被管理起來,又聲明周期來進(jìn)行控制

但是針對(duì)以前設(shè)計(jì)的Service,例如很多Service并非繼承自SystemService的,而是繼承自各類interface的。這種service就在內(nèi)部定義了一個(gè)靜態(tài)內(nèi)部類,LifeCycle繼承子SystemService,來輔助完成控制。

如MountService中就定義了一個(gè)這樣的靜態(tài)內(nèi)部類

public static class Lifecycle extends SystemService {private MountService mMountService;public Lifecycle(Context context) {super(context);}@Overridepublic void onStart() {mMountService = new MountService(getContext());publishBinderService("mount", mMountService);}@Overridepublic void onBootPhase(int phase) {if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {mMountService.systemReady();}}@Overridepublic void onStartUser(int userHandle) {mMountService.onStartUser(userHandle);}@Overridepublic void onCleanupUser(int userHandle) {mMountService.onCleanupUser(userHandle);}} SystemServer中啟動(dòng)MountService的時(shí)候 private static final String MOUNT_SERVICE_CLASS ="com.android.server.MountService$Lifecycle"; ...... mSystemServiceManager.startService(MOUNT_SERVICE_CLASS);

首先定義了一個(gè)內(nèi)部類的字符串,利用反射來加載這個(gè)類

public SystemService startService(String className) {final Class<SystemService> serviceClass;try {serviceClass = (Class<SystemService>)Class.forName(className);} catch (ClassNotFoundException ex) { ......}return startService(serviceClass);}

啟動(dòng)這個(gè)類

public <T extends SystemService> T startService(Class<T> serviceClass) { Constructor<T> constructor = serviceClass.getConstructor(Context.class);service = constructor.newInstance(mContext); ...... mServices.add(service); ...... service.onStart(); ...... }

這里就調(diào)用了SystemService的生命周期,將service啟動(dòng)起來了

(二)第二類Service,就僅僅實(shí)現(xiàn)了要提供給外面的接口,不涉及生命周期的管束。

PackageManagerService就是這類,SystemServer都是去顯示調(diào)用它的主要生命函數(shù),例如main等

走形式上service大概就這兩類吧,以后遇到新的就再補(bǔ)充@.@

原文地址:?https://zhuanlan.zhihu.com/p/20510083

總結(jié)

以上是生活随笔為你收集整理的Android Service 形式分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。