BAT大咖助力Android面试3-service面试详解

三,service面试详解

service是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件,可由其他组件启动,一旦启动可在后台长时间运行,即使启动它的组件已经被销毁,也不会受影响。

1,service与Thread

参考自:https://blog.csdn.net/wei_chong_chong/article/details/52251193

1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。thread是由本应用程序托管。可以用 Thread 来执行一些异步的操作。可做耗时操作

2). Service:Service 是android的一种机制,系统的组件,它由系统进程托管(servicemanager)。当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。不可做耗时操作,如果要做,service中添加Thread去做

Thread的使用

典型的应用中,Thread可以在以下三个位置被创建,不同的位置,其生命周期不一样,所以,我们应该根据该Thread的目标生命周期来决定是在Service中创建Thread还是在Activity中创建它。

(1) 在Activity中被创建

这种情况下,一般在onCreate时创建,在onDestroy()中销毁,否则,Activity销毁后,Thread是会依然在后台运行着。

这种情况下,Thread的生命周期即为整个Activity的生命周期。所以,在Activity中创建的Thread只适合完成一些依赖Activity本身有关的任务,比如定时更新一下Activity的控件状态等

核心特点:该Thread的就是为这个Activity服务的,完成这个特定的Activity交代的任务,主动通知该Activity一些消息和事件,Activity销毁后,该Thread也没有存活的意义了。

(2)在Application中被创建

这种情况下,一般自定义Application类,重载onCreate方法,并在其中创建Thread,当然,也会在onTerminate()方法中销毁Thread,否则,如果Thread没有退出的话,即使整个Application退出了,线程依然会在后台运行着。

这种情况下,Thread的生命周期即为整个Application的生命周期。所以,在Application中创建的Thread,可以执行一些整个应用级别的任务,比如定时检查一下网络连接状态等等

核心特点:该Thread的终极目标是为这个APP的各个Activity服务的,包括完成某个Activity交代的任务,主动通知某个Activity一些消息和事件等,APP退出之后该Thread也没有存活的意义了。

以上这两种情况下,Thread的生命周期都不应该超出整个应用程序的生命周期,也就是,整个APP退出之后,Thread都应该完全退出,这样才不会出现内存泄漏或者僵尸线程。那么,如果你希望整个APP都退出之后依然能运行该Thread,那么就应该把Thread放到Service中去创建和启动了。

(3)在Service中被创建

这是保证最长生命周期的Thread的唯一方式,只要整个Service不退出,Thread就可以一直在后台执行,一般在Service的onCreate()中创建,在onDestroy()中销毁。

所以,在Service中创建的Thread,适合长期执行一些独立于APP的后台任务,比较常见的就是:在Service中保持与服务器端的长连接

2,service启动

(1),startService

  • 定义一个类继承service
  • 在manifest.xml文件中配置该service
  • 使用context的startService(Intent)方法启动该service
  • 不再使用时,调用stopService(Intent)方法停止该服务
  • onCreate首次创建服务执行,onStartCommand方法每次重启服务都会调用

(2),bindService

  • 创建BindService服务端,继承自Service并在类中,创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用;
  • 从onBind()回调方法返回此Binder实例;
  • 在客户端中,从onServiceConnected()回调方法中接收Binder,并使用提供的方法调用绑定服务
  • 多个activity可以绑定一个服务
  • 绑定解除,服务销毁

android开发之service详解

猜你喜欢

转载自blog.csdn.net/superjunjin/article/details/80180427
今日推荐