2024年 安卓面试题 Service篇

1.service 的生命周期,两种启动方式的区别

StartService 生命周期

onCreate ()————onStartCommand()———————onDestroy()

BIndService 生命周期

onCreate()-————onBind()—————onUnbind()——————————onDestroy()

区别

Service有两种启动方式,主要是startService和bindService。Service的生命周期方式onCreate,onStart,onDestroy。而这两种启动方式对Service声明周期的影响是不一样的。

1、startService方式启动服务,调用者与服务之间没有关联,即使调用者退出了,服务正常的运行,多次调用startService()方法并不会创建多个服务, 但是onStart()方法会被多次调用。通过startService,Service会经历 onCreate -> onStart,stopService的时候直接onDestroy。

2、bindService方式启动服务,调用者与服务之间绑定在一起,即调用者退出了,服务也就停止了。通过bindService, Service会经历onCreate-onBind,这个时候服务的调用者胡服务绑定在一起。调用者退出了,Service就会调用onUnbind->onDestoryed,所谓绑定在一起就共存亡。


2.如何保证Service不被杀死 ?

服务不被杀死 两种情况 ,一永远在执行,不执行onDestroy,另外一种方法执行完onDestroy()再执行onCreate();

1,通过service中的onstartCommand方法,他其中有一个参数是flag,他有四种标志,分别为:

START_STICKY:重启服务,如果没有传递给他一个intent,那么intent为null,
START_NOT_STICKY:如果不进行传递intent,将不会启动,所以不会收到null的intent.

START_REDELIVER_INTENT:重启后将重新的intent传递过来。

START_STICKY_COMPATIBILITY是START_STICKY的兼容版本,不保证一定会重启,所以建议使用第一个标志,

在使用的时候将onstartCommand方法分局不同的需求返回不同的标志即可,首先第一个标志。

2,通过在service中在自己的ondestory方法中,启动oncreate方法即可,这样也是非常简单的

3,通过更改优先级的方式,在清单文件中,将优先级更改为1000,应该就差不多了,在清理内存的时候,优先级越高的越不容易被杀死。

4,通过发送广播,在服务中,当服务销毁的时候发送条广播,广播接收器接收到广播的时候,重新启动服务

5,创建定时器,通过定时启动任务,每隔一定时间重新启动一次服务即可

6,通过将service更改为前台服务也可以避免被杀死


3.IntentService是什么,IntentService原理,应用场景及其与Service的区别

1.IntentService是一个用来处理异步任务并且处理完任务之后会自行退出的service(PS:handleMessage 里回调onHandleIntent之后调用了stopSelf(msg.arg1););

2,service 和IntentService的区别是,IntentService有自己的工作线程,不会阻塞主线程出现ANR,而且任务结束后会自己停止,不需要手动停止。相反service会依赖创建它的线程,所以在处理耗时操作时会出现ANR情况,一般要service+thread组合使用。

3,多次启动Intentservice会怎样?

多次启动不会创建多个service的实例,而是都会走onStartCommd和onstart方法,因为内部HandlerThread的缘故,多个任务不会同时执行,应为HandlerThread内部只有一个子线程,任务会排成队逐个执行直到结束。

4,什么情况下用到Intentservice?

任务要一步一步执行,并且执行结束后自行结束服务,比方说,自动更新,下载apk,安装apk,等等。
 


5.bindService和startService混合使用的生命周期以及怎么关闭

onCreate() —> onBind() —> onUnbind() –> onDestory();
1)创建服务onCreate()在整个生命周期仅执行一次;
2)每次调用服务必须首先bindService/onBind,执行unbindService/onUnbind后不能调用;
3)服务的生命周期受限于UI线程。一旦应用(Activity)终止,服务将onDestory销毁;
4)可以在绑定后调用服务里的功能。


1.如果先bindService,再startService:
在bind的Activity退出的时候,Service会执行unBind方法而不执行onDestory方法,因为有startService方法调用过,所以Activity与Service解除绑定后会有一个与调用者没有关连的Service存在
2.如果先bindService,再startService,再调用Context.stopService
Service的onDestory方法不会立刻执行,因为有一个与Service绑定的Activity,但是在Activity退出的时候,会执行onDestory,如果要立刻执行stopService,就得先解除绑定
3 先startService,再bindService。

首先在主界面创建时,startService(intent)启动方式开启服务,保证服务长期后台运行;
然后调用服务时,bindService(intent, connection, BIND_AUTO_CREATE)绑定方式绑定服务,这样可以调用服务的方法;

调用服务功能结束后,unbindService(connection)解除绑定服务,置空中介对象;
最后不再需要服务时,stopService(intent)终止服务。


6.用过哪些系统Service

Android系统中有众多的系统服务,其中有三大核心服务:ActivityManagerServiceWindowManagerServicePackageManagerService

系统服务一览表:

1.ActivityManagerService

Android framework框架核心服务,管理整个框架中任务、进程管理, Intent解析等的核心实现,管理四大组建的生命周期。

2.WindowManagerService

Android framework框架核心服务,窗口管理服务。

3.PackageManagerService

Android framework框架核心服务,用于APK的解析、权限验证、安装等。

4.AccountManagerService

Android账户服务,提供了对账户、密码、授权的集中管理。

5.AccessibilityManagerService

辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果,View的点击、焦点等事件分发管理服。

6.AlarmManagerService

提供闹铃和定时器等功能。

7.AppWidgetService

Android中提供Widget的管理和相关服务

8.AssetAtlasService

负责将预加载的bitmap组装成纹理贴图,生成的纹理贴图可以被用来跨进程使用,以减少内存。

9.AudioService

AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理。

10.BackupManagerService

备份服务。

11.BatteryService

负责监控电池的充电状态、电池电量、电压、温度等信息,当电池信息发生变化时,发生广播通知其他关系电池信息的进程和服务。

12.BluetoothManagerService

负责蓝牙后台管理和服务。

13.ClipboardService

剪贴板服务。

14.CommonTimeManagementService

管理本地常见的时间服务的配置,在网络配置变化时重新配置本地服务。

15.ConnectivityService

网络连接状态服务。

16.ContentService

内容服务,主要是数据库等提供解决方法的服务。

17.ConsumerIrService

远程控制,通过红外等控制周围的设备(例如电视等)

18.CountryDetectorService

检测用户国家

19.DevicePolicyManagerService

提供一些系统级别的设置及属性

20.DiskStatsService

磁盘统计服务,供dumpsys使用

21.DisplayManagerService

用于管理全局显示生命周期,决定在已连接的物理设备如何配置逻辑显示,并且通知系统和应用状态的改变。

22.DreamManagerService

屏幕保护。

23.DropBoxManagerService

用于系统运行时日志的存储于管理。

24.IdleMaintenanceService

用于观察设备状态,在设备空闲时执行维护任务。将一些比较耗时的代价比较高的任务放到设备空闲时执行,这样保证用户的体验。

25.InputManagerService

以前在WindowManagerService中,现在独立了出来,用户处理事件分发。

26.InputMethodManagerService

输入法服务,打开和关闭输入法。

27.LightsService

光感应传感器服务。

28.LocationManagerService

位置服务,GPS、定位等。

29.LockSettingsService

和锁屏界面中的输入密码,手势等安全功能有关。可以保存每个user的相关锁屏信息。

30.WallpaperManagerService

壁纸管理服务。

31.MountService

磁盘加载服务程序,一般要和一个linux daemon程序如vold/mountd等合作起作用,主要负责监听并广播device的mount/unmount/badremoval等等事件。

32.NetworkManagementService

网络管理服务。ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能。ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。

33.NetworkPolicyManagerService

维护网络使用策略。

34.NetworkStatsService

网络统计相关。

35.NetworkTimeUpdateService

监视网络时间,当网络时间变化时更新本地时间。

36.NotificationManagerService

通知服务。

37.NsdService

网络服务搜索

38.PrintManagerService

打印服务。

39.PowerManagerService

电源管理服务。

40.RecognitionManagerService

身份识别相关。

41.SamplingProfilerService

用于耗时统计等。

42.SearchManagerService

搜索服务。

43.SchedulingPolicyService

调度策略。

44.SerialService

对串口的设备进行操作

45.StatusBarManagerService

状态栏。

46.TelephonyRegistry

提供电话注册、管理服务,可以获取电话的链接状态、信号强度等等。

47.TextServicesManagerService

文本服务,例如文本检查等。

48.TwilightService

指出用户当前所在位置是否为晚上,被UiModeManager等用来调整夜间模式。

49.UiModeManagerService

管理当前Android设备的夜间模式和行车模式.。

50.UsbService

USB Host和device管理服务。

51.VibratorService

振动器服务。

52.WifiP2pService

Wifi Direct服务。

53.WifiService

Wifi服务。

54.WiredAccessoryManager

监视手机和底座上的耳机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值