Android的Service相关问题

Service详解
本文全面解析了Android Service的概念及其启动方式,包括startService与bindService的区别、IntentService的特点与使用方法、前台服务的创建流程等,帮助开发者更好地掌握Service的运用。

Service知识点

目录

Service知识点

Service的启动

Service的生命周期?

Activity如何与Service通信

IntentService是什么

说说 Activity、Intent 和 Service 是什么关系

Service优先级如何提高

Service 里面可以弹Toast吗?

是否可以在Service内进行耗时操作,会有什么后果?

一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?

前台服务是什么?和普通服务的不同?如何去开启一个前台服务?

ActivityManagerService

Service 和 Thread 的区别

Service 的 onStartCommand 方法有几种返回值?各代表什么意思?

Service使用场景?


Service的启动

Service 是 Android 中实现程序后台运行的解决方案,非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认运行在UI主线程中,所以不能做耗时操作,只能在Service中创建子线程来完成耗时操作。

补充说明:Service有两种启动方式,startService()和bindService(),它们之间的区别是:

* startService()启动后无返回结果,startService()的生命周期有三个函数,分别是onCreate()、onStartCommand()和onDestory()。当我们首次startSerivce()启动一个service的时候,会调用service的onCreate函数创建该服务,然后调用onStartCommand函数执行操作,可以调用stopSevice/stopSelf来结束一个Service(多次调用都不会有异常)。(注:多次通过startService启动服务,onCreate只执行1次,都会调用onStartCommand。)启动后,它就独立于调用者而运行,因此任务结束后,Service需要stopSevice/stopSelf函数来停止该服务,避免消耗系统资源或电量。

* bindService()绑定Service后可以进行交互操作(发请求、获取结果或IPC通信),bindService的生命周期有四个函数,分别是onCreate()、onBind() 、onUnBind()和onDestory(),首次启动会先执行onCreate()方法创建服务,onBind() 会将调用者和服务绑定在一起,调用者退出时可以调用unbindService()进行解绑操作(方法中会调用onUnBind和onDestory)。(注:多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。)

Service的生命周期?

Service 的生命周期

* 回调方法含义:

    * onCreate:服务第一次被创建时调用;

    * onStartComand:服务启动时调用;

    * onBind:服务被绑定时调用;

    * onUnBind:服务被解绑时调用;

    * onDestroy:服务停止时调用;

* 生命周期:

    * 只调用 startService() 启动服务:onCreate() -> onStartCommand() -> onDestory()

    * 只调用 bindService() 绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory()

    * 同时使用startService()与bindService():onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory。

* 种类:

    * startService():开启Service,调用者退出后Service仍然存在。

    * bindService():开启Service,调用者退出后Service也随即退出。

Service的调用方式?

// startService

* 第一步:新建类并继承Service且必须重写onBind()方法,有选择的重写onCreate()、onStartCommand()及onDestroy()方法。

* 第二步:在配置文件AndroidManifest.xml中进行注册,否则不能生效。

* 第三步:在 Activity 中利用 startService(Intent) 可实现 Service 的启动。

* 第四步:在 Activity 中 stopService(Intent) 停止服务,或者在Service任意位置调用stopSelf();

public class MyService extends Service {





    public MyService() {

    }

    @Override

    public void onCreate() {

        super.onCreate();

    }

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        new Thread(new Runnable() {

            @Override

            public void run() {

                //处理具体的逻辑

                //必须调用stopService或者stopSelf方法才能停止

                stopSelf();

            }

        }).start();

        return super.onStartCommand(intent, flags, startId);

    }

    @Override

    public void onDestroy() {

        super.onDestroy();

    }

    @Override

    public IBinder onBind(Intent intent) {

        throw new UnsupportedOperationException("Not yet implemented");

    }

}

//在配置文件AndroidManifest.xml中进行注册

<service

    android:name=".MyService"

    android:enabled="true"

    android:exported="true" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

quchen528

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

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

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

打赏作者

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

抵扣说明:

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

余额充值