Android面试常客--四大组件之Service

上一篇我们说了四大组件的其中一个Activity,今天我们的主角是Service,这个组件也是面试的常客,基本上面试官都会问到有关Service的问题,比如:如何启动Service、Service的生命周期等等,下面一一解剖!

Q:Service的生命周期
A:这里写图片描述

Q:如何保证Service不被杀死?
A:就这个问题就可以写一篇很长的文章了!!

  • Service设置成START_STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

  • 通过 startForeground将进程设置为前台进程, 做前台服务,优先级和前台应用一个级别​,除非在系统内存非常缺,否则此进程不会被 kill

  • 双进程Service: 让2个进程互相保护**,其中一个Service被清理后,另外没被清理的进程可以立即重启进程

  • QQ黑科技: 在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死

  • 在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用 Android4.0系列的一个漏洞,已经确认可行

  • 用C编写守护进程(即子进程) : Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。鉴于目前提到的在Android->- Service层做双守护都会失败,我们可以fork出c进程,多进程守护。死循环在那检查是否还存在,具体的思路如下(Android5.0以上的版本不可行)

  • 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。

  • 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。

  • 联系厂商,加入白名单

Q:Service与Activity之间通信的几种方式
A:
1、通过Binder
2、通过Broadcast广播

Q:如何启用Service,如何停用Service?
A:
- startService:生命周期和调用者不同.启动后若调用者未调用stopService而直接退出,Service仍会运行
- bindService:生命周期与调用者绑定,调用者一旦退出,Service就会调用unBind->onDestory

Q:Service和Thread的区别?
A:
1、定义方面区别
Thread是程序执行的最小单元(线程),它是分配CPU的最小单位,可以用它来执行一些异步操作。
service是android的一种机制,当它运行的时候,如果是本地的service,那么它对应的线程是主线程,(也可以理解为,service依托于它所在的主线程),所以相比而言,Thread是很独立的。
2、实际开发中方面区别。
Thread可以执行耗时操作。
service试运行在主线程,不可以做耗时操作。如果需要必须开启一个子线程来操作耗时任务。

3、应用场景方面区别。
Thread,经常用在、数据下载、数据上传,图片加载,等大数据交互的情况下。
service,经常用在,需要长时间运行在后台,并且不需要数据交互,才会使用,比如闹钟,天气预报,后台播放音乐等。

Q:IntentService有何优点?
A:
一、IntentService 简介
IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。先看 Service 本身存在两个问题:
Service 不会专门启动一条单独的进程,Service 与它所在应用位于同一个进程中;
Service 也不是专门一条新线程,因此不应该在 Service 中直接处理耗时的任务;

二、IntentService 特征
会创建独立的 worker 线程来处理所有的 Intent 请求;
会创建独立的 worker 线程来处理 onHandleIntent()方法实现的代码,无需处理多线程问题;
所有请求处理完成后,IntentService 会自动停止,无需调用 stopSelf()方法停止 Service;
为 Service 的 onBind()提供默认实现,返回 null;
为 Service 的 onStartCommand 提供默认实现,将请求 Intent 添加到队列中;

个人拙见,会不断补充和修正

To Be Continued…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Me-hao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值