zoukankan      html  css  js  c++  java
  • Android 两种启动Service(远程)的方式:Bind 与Start

    前言:本文主要讨论启动远程Service。

    Service和Activity不在一个工程里面,也即不在一个App里面。不在一个进程里,所以会用到AIDL。

    Service的android:process属性未指定。

    一、startService

    1、通过调用startService启动服务的过程:

    onCreate —》onStartCommand —》onStart

    startService 仅用于启动服务,如果Activity需要与Service进行通信,需利用Broadcast。

    2、而后,多次调用startService,服务会多次执行:

    onStartCommand —》onStart

    3、多次调用startService后,调用一次stopService即可结束服务。(若多次调用stopService,只有第一次有用)

    4、调用stopService的服务结束过程:

    —》onDestroy

    另外,

    Activity的启动过程:onCreate —》onStart —》onResume

    Activity的退出过程:onPause —》onStop —》onDestroy

    二、bindService

    1、通过调用bindService启动服务的过程:

    onCreate —》onBind  —》(onServiceConnected)

    bindService 可用于启动服务,且能使Activity与Service进行通信。

    2、多次调用bindService,服务本身未执行任何操作。

    3、所以一次unBindService就能结束服务。(若多次调用unBindService,第一次有用,后面会出错)

    4、调用unBindService的服务结束过程:

    onUnbind —》onDestroy

    三、先startService,后bindService

    1、先调用startService,后调用bindService。服务的执行过程为:

    onCreate —》onStartCommand —》onStart —》onBind  —》(onServiceConnected)

    2、先unBindService,后stopService。服务结束的执行过程:

    onUnbind —》onDestroy

    需注意的是:unBindService会执行到onUnbind,stopService会执行到onDestroy。

    3、先stopService,后unBindService。服务结束的执行过程:

    onUnbind —》onDestroy

    需注意的是:stopService不会执行任何操作,unBindService会执行到onUnbind—》onDestroy。

    四、先bindService,后startService

    1、先调用startService,后调用bindService。服务的执行过程为:

    onCreate —》onBind  —》(onServiceConnected) —》onStartCommand —》onStart

    2、先unBindService,后stopService。

    服务执行的过程同 三。

    3、先stopService,后unBindService。服务结束的执行过程:

    服务执行的过程同 三。

    五、总结

    1、多次bindService时,服务本身的onBind不会被多次执行。

    2、bind上一个Service后,执行一次unBindService就够了。不然会出错。

    3、一个App里,同一个Activity多次bind一个服务,除了第一次,后面的bind不会有任何onBind、onServiceConnected打印。

        一个App里,不同的Activity去bind一个服务,第一次bind有onBind、onServiceConnected打印,后面的bind只会有onServiceConnected打印。

    4、一个Activity bind上一个Service后,如果Activity finish前没有调用unBind,App会崩溃,Log打印如下:

    android.app.ServiceConnectionLeaked: Activity com.example.testactivity1.MainActivity has leaked ServiceConnection

                                                 com.example.testactivity1.MainActivity$1@412d9808 that was originally bound here.

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/mulisheng/p/4097968.html
Copyright © 2011-2022 走看看