美文网首页
Android中服务service

Android中服务service

作者: 提起裙摆做女王i | 来源:发表于2021-08-11 15:07 被阅读0次

    本文原文连接https://blog.csdn.net/wenzhi20102321/article/details/53155736

    一,Service简单理解

    Service是Android中的四大组件之一,它的级别和Activity差不多。只不过Service没有页面显示,只能后台运行,可以和其他组件进行交互。
    Service的后台运行并不是子线程,是在主线程中进行的,只是它没有界面显示。如果Service进行了耗时操作同样需要开启子线程,否则会跟Activity一样出现ANR问题(application not response–程序没有响应)。
    补充说明:
    主线程的内容包括UI和后台,只要程序中的UI或者后台其中一个在跑,程序都算是在运行状态。

    二,Service创建和注册

    创建

    1,创建一个自己的TestService继承Service
    2,必须实现重写其中的onBind方法,可以在里边做各种操作,也可以接收传递过来的Intent的数据。
    (在Android Studio中可以直接新建一个Service)

    public class TestService extends Service {
        @Override
        public IBinder onBind(Intent intent) {
            // TODO: Return the communication channel to the service.
            throw new UnsupportedOperationException("Not yet implemented");
        }
    }
    

    注册

    服务的注册是四大组件中最简单的一个,一般只要设置name属性就可以了。

    <service
         android:name=".service.OneService"
         android:enabled="true"
         android:exported="true"></service>
    

    三,Service的两种启动模式

    1,startService()启动
    (1)启动服务startService:onCerate(),onStart()
    (2)停止服务stopService:onDestroy()
    此方法启动服务,服务如果未被创建,系统会先调用onCreate()方法,接着调用onStrat()方法。如果调用startService前服务已经被启动,多次调用启动方法,不会多次调用onCreate,但会导致多次调用onStrat。
    2,bindService()启动
    (1)绑定bindService:onCreate(),onBind()
    (2)解除绑定unbindService:onUnbind()
    (3)正常停止程序服务的方法是先接触绑定unbindService,在停止服务stopService
    绑定后调用stopService方法,这时候是不能停止服务的,如果这时再调用解绑unbindService,程序会先解绑,后停止服务。
    用此方法启动服务,在服务未被创建时,会先调用onCreate(),接着调用onBind()方法,这时候调用者和服务绑定在一起,调用者退出,系统会先调用服务的onUnbind(),然后onDestroy()。如果调用bindService之前服务已经被绑定,多次调用bindService并不会导致onCreate()和onBind()方法被多次调用。如果调用者想与正在绑定的服务解除绑定,可以调用unbindService()。

    绑定Service方法:bindService(intent, conn, Service.BIND_AUTO_CREATE);
    三个参数的说明:
    第一个:Intent对象
    第二个:ServiceConnection对象,创建该对象要实现它的onServiceConnected()和 on ServiceDisconnected()来判断连接成功或者是断开连接
    第三个:创建Service的模式,一般指定绑定的时候自动创建

    四,Service的生命周期

    Service的生命周期

    (1),onCerate()服务第一次被创建
    (2),onStartComand()服务开始工作
    (3),onBind()服务已经绑定
    (4),onUnBind()服务解绑
    (5),onDestroy()服务已经停止

    五,IntentService

    普通的Service进行耗时操作要创建一个线程去完成,因为service是在主线程运行的,并且这个子线程完成工作要手动停止 。IntentService是继承了Service并处理起步请求的一个类,在IntentService内有一个工作线程,来处理耗时操作,启动IntentService的方式和启动传统的Service是一样,当任务执行完成后,IntentService会自动停止,而不需要我们去控制。
    可以启动多次IntentService,每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推,而且,所有请求都在一个单线程中,不会阻塞主线程,同一时间只处理一个请求。
    IntentService优点
    1,省去了在Service中开线程的麻烦
    2,当操作完成时,不用手动停止Service。IntentService是Service,但是比Service更智能。

    相关文章

      网友评论

          本文标题:Android中服务service

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