Android四大组件之一Service

1.Service是什么?

       Service是一种在后台运行的组件,它不依赖于任何用户界面,用于执行长时间运行的操作或为远程进程执行作业。是Android中实现程序后台运行的解决方案,因此非常适用于那些不需要和用户进行交互而且还要求长期运行的任务。

2、两种Service生命周期

  1.StartService:onCreate--->onStartCommand(执行多次)------>onDestroy(只执行一次)

            应用退出,但后台没有杀死,服务还在

  2.bindService:onCreate----->onBind----->onunBInd----->onDestoroy(都只执行一次)

            应用退出服务就被杀死

3.两种启动模式

  1. startService  (启动的服务)

   2.  bindService(绑定的服务)

   3.区别

  •         startService启动的service,service会一直在后台运行,就算调用这已经死掉。服务器还是会运行
  •         bindService是将调用者和service是绑定在一起的关系,如果调用者退出了,service就会掉用onUNBind进行解绑,然后onDestory销毁。

4.Activity和Service如何进行通信

    1.startService         可以通过广播来实现通信

      2.BindService        当Activity通过bindService来绑定一个Service时,bindService会立即返回,他不会返回Ibinder给客户端,要接受IBinder,客户端Activity必须创建一个长连接ServiceConnection的实例并传给bindService(),ServiceConnection包含一个会掉方法,系统掉用次方法来床底要返回的IBinder


5.Service能否执行耗时任务?

不能执行耗时操作,因为service是在主线程运行的。但是可以用开启一个子线程来进行耗时操作,IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作 在OnHandleIntent方法中做耗时操作

6.Service和Thread的区别

    Thread 

  •         是程序执行的最小单元,他是分配CPU的基本单位,可以来执行一些异步操作,室友应用程序托管
  •           运行时独立于Activity的,没有办法在不同的Activity中对同一Thread进行控制。

    Service 

  • 是系统的组件,有系统进程托管
  • 运行在进程中的主线程中的 可以在任何地方调用Context.startService,Context.stopService,Context.bindService,Context.unBindService来控制它,在Service中注册广播,其他地方发送广播来控制它

7.Service的优先级

    可以用setForegroup(true)来设置Service的优先级。默认启动的Service是别标记为backgroup,也就说比给的Service设置了foregroup那么他就和正在运行的Activit类似优先级得到了一定的提高。 也可以掉用StopForegroup(boolean)将Service置为backgroud的状态。

猜你喜欢

转载自blog.csdn.net/hy3098626581/article/details/79964567