美文网首页
第二周——总结一下Service

第二周——总结一下Service

作者: 阳光的nick_lxz | 来源:发表于2018-07-09 17:05 被阅读0次

一.什么是Service

Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。

注:后台服务,这里有个误区,一般我们会把子线程执行的任务称为后台任务,其实,Service默认是在主线程的!!!默认生命周期的方法都是在主线程的。如果要让回调在子线程中运行,使用IntentService.

二.使用场景:

1.不可交互

不可交互的后台服务即是普通的Service,通过startService()方式开启。

2.可交互:

通过bindService()方式启动的服务。

三.service的生命周期

                                        startService()方式                              bindService()方式
image.png

3.如何启动一个service

首先继承Service,四大组件都要在manifest文件中注册。

public class OpenLockService extends Service {

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
      

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
}

onCreate()方法会在创建该Service的时候回调,onStartCommand则在每次启动该Service的时候都会回调。
onBind只有在使用bindService方式启动的时候才有用。
onStartCommand返回值

  • START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand方法后,服务被异常kill掉,系统不会自动重启该服务。
  • START_STICKY:如果Service进程被kill掉,保留Service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建+ Service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被+ 传递到Service,那么参数Intent将为null。
  • START_REDELIVER_INTENT:重传Intent。使用这个返回值时,系统会自动重启该服务,并将Intent的值传入。
(1) 使用startService()启动

通过该方法启动的service会一直运行在后台,即便启动service的组件已被destory。必须调用stopService(Intent intent)方法或者在onStartCommand方法内部调用stopSelf()方法来关闭该Service。

Intent intent=new Intent(this,testService.class);

startService(intent);
(2)使用bindService()启动

通过绑定方式启动的servcie是一个client-server结构,该service可以与绑定它的组建进行交互。

一个BoundService仅在有组件与其绑定是才会运行,多个组件可与一个Service绑定,Service不再与任何组件绑定时会被destroy

ServiceConnection connection=new ServiceConnection() {

    @Override

    public void onServiceConnected(ComponentName name, IBinder service) {

    Log.d(TAG, "onServiceConnected: ");

    testService.LocalBinder binder= (testService.LocalBinder) service;

    binder.getHelloBoundService();

    }

    @Override

    public void onServiceDisconnected(ComponentName name) {

    Log.d(TAG, "onServiceDisconnected: ");

    }

    };

bindService(intent,connection, Context.BIND_AUTO_CREATE);
(3)混合方式 (既调用了starService()也调用了bindService)

该情况下单独调用stopService()或则unBindService()都不会停止服务,必须两个方法都调用(无先后顺序要求)

四.IntentService

(1) Service的子类,内部自带一个任务线程(在onCreate方法中会创建一个HandleThread 线程)

当任务执行完后,他会自动停止,不需要调用stopService()。

五.跨进程的Service:

在manifest注册的时候单独指定了一个进程

相关文章

  • 第二周——总结一下Service

    一.什么是Service Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 ...

  • 第二周 Service

    话题:清晰地理解 Service。 1、Service 的 start 和 bind 状态有什么区别?2、同一个 ...

  • [第二周总结]

    (第二周总结) 不知不觉过了第二周。 先说一下进度,每天能坚持打卡、早起、喝温水、运动。读书情况,《原则》已完成,...

  • 学习总结:WorkShop(一)

    学习总结:WorkShop(一) 基于RestfulAPI的Service服务-Micro-Service to ...

  • ubuntu中的定时任务——crontab

    1.命令总结 service cron start //启动服务 service cron stop ...

  • 第二步的胜利

    这是自我坚持的第二周,第二周和第一周的感觉还是有点不同的,以后还是决定每个周日做一下总结,算是对本周内容的一个回顾...

  • 【Android面试特辑】Service总结回顾

    总结一下Service的内容,建议保存图片查看,欢迎补充。Binder的内容单独提出来。

  • Service总结

    什么是serice: Service可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此...

  • service总结

    纯粹是个人学习总结,如有不对的地方请吐槽。 Service是一种在Android应用后台的一种组件,没有自己的界面...

  • service总结

    相关文章 【1】 service简单使用 本篇文章很庞大,讲述了service的基本概念,两种启动方式的比较,以及...

网友评论

      本文标题:第二周——总结一下Service

      本文链接:https://www.haomeiwen.com/subject/glltpftx.html