美文网首页
Android四大组件之Service

Android四大组件之Service

作者: Harrison_CSL | 来源:发表于2018-06-14 22:16 被阅读0次

    Service用于后台操作耗时任务。

    就比如我们咋A界面下载东西时,总不能让客户一直处于A界面。当用户单击跳转界面时,这个时候就用到了我们的Service,让下载进入到后台。

    service分为两种启动模式:

    一丶startService();

    二丶bindService();



    startService();开启服务方式,它只有App被杀死时才会被销毁。或者手动调用 stopService();方法结束service。

    startService();生命周期流程:

    oncreate(只执行一次)——onStartCommand(如果服务已存在,每次点击开启服务都会被执行但并未开启一个服务,服务不存在则开启服务。)——service运行.....——(service手动调用停止或者App杀死)ondestroy(只执行一次)。

    startService(Intent)开启时需要参数Intent  

    ServiceTest是我的那个Service类

    解绑时调用stopService(intent);

    bindService();开启服务模式,当前Activity被finish()的话此服务会被销毁。或者手动调用unbindService();关闭服务。

    bindService();生命周期流程:

    oncreate(只执行一次)——onBind(只执行一次,接收第一次创建Service时接收Activity传过来的参数)—service运行中....—onUnBind(调用unbindService()解绑时或者当前activity被finish()时执行)——ondestroy(只执行一次)。

    bindService(intent,serviceConnection, Service.BIND_AUTO_CREATE);启动时需要三个参数

    在使用bindService()启动时我们需要在继承Service的类里构造内部类,内部类继承Binder(Binder实现了IBinder)。。在onBind里return new出我们的内部类对象,同时我们Activity向service传递的值也是在onBind方法里获取到的。






    这里我就是模拟了一个类似于后台下载的代码。
    当启动成功时,调用内部类的方法,向Activity传值。在启动成功的监听回调里,我们将IBinder强转成我们的那个内部类。然后我们有了内部类对象,是不是就可以调用内部类的方法了呢。肯定能了!通过调用方法获取到Service向Activity穿过来的值。(不过要注意所有的方法都会执行一次)

    IntentService:

    它本身就是运行在子线程中的,可直接做耗时操作。

    创建类继承IntentService

    生命周期:oncreate()——onHandleIntent()——onDestroy()

    oncreate:如果当前已存在此服务就不会去走。调用    stopService()后再startService()走此周期

    onHandleIntent:此生命周期可多次运行,但他会等你这次耗时操作完成后才会执行。当耗时操作在执行过程中调用了stopService()会走onDestroy()但是他会坚持吧耗时操作执行完。

    onDestroy:等操作完成后会自已走此方法。自动销毁。

    比如咱们模仿一个耗时操作在onHandleIntent方法:

    for (int i =0; i <20; i++) {

    try {

    Thread.sleep(500);

    Log.e("IntentService","i==" + i);

    }catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    相关文章

      网友评论

          本文标题:Android四大组件之Service

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