第二周——总结一下Service

一.什么是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注册的时候单独指定了一个进程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 【Android Service】 Service 简介(★★★) 很多情况下,一些与用户很少需要产生交互的应用程...
    Rtia阅读 3,148评论 1 21
  • 前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 Serv...
    PassersHowe阅读 1,413评论 0 5
  • 服务基本上分为两种形式 启动 当应用组件(如 Activity)通过调用 startService() 启动服务时...
    pifoo阅读 1,268评论 0 8
  • [文章内容来自Developers] Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。...
    岳小川阅读 863评论 0 7
  • 时间 总是让人捉摸不透 时间 总能带来许多惊喜 时间 总会冲淡那些回忆 时间 总是一副疗伤的药
    栀子枝z阅读 211评论 0 2