Android面试:Service相关

1. Service生命周期

  • onCreate():如果Service没被创建过,调用startService()后会执行onCreate()回调;如果Service已经处于运行中,调用startService()不会执行onCreate()方法。也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService不会重复调用onCreate(),此方法适合完成一些初始化工作;
  • onStartComand():服务器启动时调用,此方法适合完成一些数据加载工作,比如会在此处创建一个线程用于下载数据或播放音乐;
  • onBind():服务器被绑定时调用
  • onUnBind():服务器被解绑时调用
  • onDestroy():服务器停止时调用

2. Service的两种启动方式?区别在哪?

  • Service两种启动模式:
  • startService():通过这种方式调用startService,onCreate()只会被调用一次,多次调用startService会多次执行onStartCommand()和onStart()方法,如果外部没有调用stopService()或stopSelf()方法,service会一直运行
  • bindService():如果该服务之前还没有创建,系统回调顺序为onCreate()—>onBind()。如果调用bindService()方法前服务已经被绑定,可以调用bindService()方法不会多次创建服务及绑定。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,回调顺序为onUnbind()—>onDestroy()

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

  • onStartCommand()方法中,返回START_STICKY或者START_REDELIVER_INTENT
    • START_STICKY:如果返回START_STICKY,表示Service运行的进程被Android系统强制杀掉之后,Android系统会将该Serive依然设置为started状态(即运行状态),但是不再保证onStartCommand()方法传入的intent对象;
    • START_NO_STICKY:如果返回START_NO_STICKY,表示当Service运行的进程被Android系统强制杀掉之后,不会重新创建该Service
    • START_REDELIVER_ITENT:如果返回START_REDELIVER_INTENT,其返回情况与START_STICKY类似,但不同的是系统会保留最后一次传入onStartCommand()方法中的Intent再次保留下来并再次传入到重新创建后的Service onStartCommand()方法中
  • 提高Service的优先级。在AndroidManifest.xml文件中对于intent-filter可以通过android:priority="1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播;
  • 在onDestroy()方法里重启Service,当Service走到onSestroy()时,发送一个自定义广播,当收到广播时,重新启动Service
  • 提升Service进程的优先级。进程优先级由高到低:前台进程—可见进程—服务进程—后台进程—空进程,可以使用startForeground将service放到前台状态,这样低内存时,被杀死的概率会低一些;系统广播监听service状态将APK安装到/system/app,变身为系统级应用。

4. 能否在Service开启耗时操作?怎么做?

  • Service默认并不会运行在子线程中,也不运行在一个独立的进程中,它同样执行在主线程中(UI线程)。换句话说,不要在Service里执行耗时操作,除非手动打开一个子线程,否则有可能出现主线程被阻塞(ANR)的情况。

5. 常见系统Service

名称返回的对象
WINDOW_SERVICEWindowManager【管理打开的窗口程序】
LAYOUT_INFLATER_SERVICELayoutInflater【获取XML里定义的view】
ACTIVITY_SERVICEActivityManager【管理应用程序的系统状态】
POWER_SERVICEPowerManager【电源服务】
ALARM_SERVICEAlarmManager【闹钟服务】
NOTIFICATION_SERVICENotificationManager【状态栏服务】
KEYGUARD_SERVICEKeyguardManager【键盘锁服务】

6. 了解ActivityManagerService吗?发挥什么作用?

  • ActivityManagerService是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值