`

Android Service两种启动启动方式 及 adndroid service生命周期

 
阅读更多

startService:
正常调用:onCreate->onStart
取消绑定:onDestroy
如果调用者自己直接退出而没有调用stopService,则Service会一直在后台运行,直到下次调用者再启动起来,并明确调用stopService

bindService
正常调用:onCreate->onBind
取消绑定:onUnbind->onDestroy

先startService,再bindService
onCreate->onStart->onBind(onCreate只调用一次)
先stopService 再unbindService
点stopService不起作用,点unbindService后,立即输入2条:
onUnbind->onDestroy
如果先unbindService再stopService
则顺序输出:onUnbind->onDestroy

先bindService再startService
onCreate->onBind->onStart(onCreate只调用一次)
先stopService再unbindService
点stopService不起作用,点unbindService后,立即输入2条:
onUnbind->onDestroy
如果先unbindService再stopService
则顺序输出:onUnbind->onDestroy

=======================================================================

adndroid service生命周期:
  一、context.startService(Intent)调用:
      onCreate()-->onStart()
      1、onStart()后调用bindService该service则调用onBind(),调用onBind以后调stopService将无法释放该service必须再调unbindService才触发onUnbind()-->onDestroy()
         bindService后如果没有调用unbindService就退出activity,则只会调用unbind()方法,并且无法释该service
         结论:如果先startService再bindService,则只有调用unbindService和stopService了后才能释放该service,否则只调用其中一个无法释放该service
         释放顺序1:unbindService-->unBind()-->stopService-->onDestroy()
         释放顺序2:stopService-->unbindService-->unBind()-->onDestroy()
         释放顺序3:stopService-->推出active-->unBind()-->onDestroy()
      2、onStart()后调用unbindService,unbindService方法会抛异常,该service对象会消失,没有调用生命周期中得任何方法,
         异常抛出后会自动调用onCreate()-->onStart()创建对象
      3、onStart()后调用stopService释放该service,执行顺序:onDestroy()
      4、onStart()后调用startService不会创建新的service,执行顺序:onStart()
      执行顺序列表(on开头的方法位service生命周期方法,其他为context对象方法):
      1、context.startService(Intent)-->onCreate()-->onStart()-->context.unbindService()(方法会抛异常)-->onCreate()-->onStart()
      2、context.startService(Intent)-->onCreate()-->onStart()-->context.stopService-->onDestroy()
      3、context.startService(Intent)-->onCreate()-->onStart()-->context.startService-->onStart()
     
      4、context.startService(Intent)-->onCreate()-->onStart()-->context.bindService()-->onBind-->context.unbindService-->unBind()-->context.stopService-->onDestroy()
      5、context.startService(Intent)-->onCreate()-->onStart()-->context.bindService()-->onBind-->context.stopService-->context.unbindService-->unBind()-->onDestroy()
      6、context.startService(Intent)-->onCreate()-->onStart()-->context.bindService()-->onBind-->context.stopService-->退出active-->unBind()-->onDestroy()
  二、context.bindService()调用:  
 
      1、context.bindService()-->onCreate()-->onBind()-->context.unbindService()-->unBind()-->onDestroy()
      2、context.bindService()-->onCreate()-->onBind()-->context.stopService
      3、context.bindService()-->onCreate()-->onBind()-->context.startService-->onStart()
     
      4、context.bindService()-->onCreate()-->onBind()-->context.startService()-->context.unbindService-->unBind()-->context.stopService-->onDestroy()
      5、context.bindService()-->onCreate()-->onBind()-->context.startService()-->context.stopService-->context.unbindService-->unBind()-->onDestroy()
      6、context.bindService()-->onCreate()-->onBind()-->context.startService()-->context.stopService-->退出active-->unBind()-->onDestroy()  
     
综合以上2点,在对service调用时最好只用一种方式,start或者bind,如果使用了2种方式,2种方式得到的是同一个service对象,并且必须是2种方式都调用了退出方式才能释放service
bind方式默认退出activity则启动释放service

分享到:
评论

相关推荐

    service的生命周期以及启动方式

    总的来说,理解并熟练掌握Service的生命周期和启动方式是Android开发中的重要技能,它有助于优化应用性能,减少资源浪费,并实现高效的服务管理。在实际项目中,合理运用Service可以帮助我们实现后台任务的异步处理...

    android Service的生命周期

    这两种方式对Service的生命周期有着不同的影响。 1. **startService()启动模式** 当通过`startService()`方法启动Service时,Service会经历以下生命周期: - `onCreate()`: Service首次创建时调用,用于初始化...

    android service的2种启动方式

    Service有两种主要的启动方式:显式启动(Explicit Start)和隐式启动(Implicit Start)。本篇文章将深入探讨这两种启动方式,并通过实例代码进行演示。 **一、显式启动(Explicit Start)** 显式启动Service是最...

    Android Service生命周期及用法!

    有两种方式连接到Service:`startService()`和`bindService()`。`startService()`用于启动Service并执行一次性任务,而`bindService()`则建立一个连接,使Activity能够与Service进行交互。当使用`bindService()`时,...

    【Android】开机自启动Service

    在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供用户界面,但可以执行各种任务,如播放音乐、网络通信等。当设备启动时,我们有时希望某些Service能够自动启动,以便立即开始执行预定的任务,...

    Android service start方式启动

    在Android应用开发中,服务(Service)是一种非常重要的组件,它允许你在后台执行长时间运行的操作,即使用户已经离开你的应用程序。本示例将探讨“startService”方式启动Android服务的基本概念、工作原理以及如何...

    Android说明Service生命周期的代码例子

    以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要包含以下几个阶段:onCreate()、onStartCommand()、onBind()、...

    Android中service基本用法,生命周期1

    服务的有两种启动方式,对应两个生命周期 startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和...

    Android防止service多次执行startCommand

    在Service类中,`onStartCommand`是处理启动命令的主要入口,它接收Intent参数并返回一个整型值,这个返回值决定了Service的生命周期和行为。开发者通常在重写这个方法时,会进行业务逻辑处理。 防止`startCommand`...

    Service的生命周期、两种启动方法的区别

    Service的生命周期、两种启动方法的区别 一、A started service onCreate, onStartCommand, onBind 和 onDestroy。这几个方法都是回调方法,都是由Android操作系统在合适的时机调用的,并且需要注意的是这几个回调...

    android学习之Service启动1

    总结起来,理解并掌握Service的启动方式和生命周期管理是Android开发中的重要环节。在实际应用中,根据需求选择合适的启动模式,并确保服务的运行效率和用户体验。通过`com.njupt.zhb.MusicPlay`这样的练习,可以...

    Android service开机自动启动

    本项目"Android service开机自动启动"提供了一个示例,演示了如何创建这样的服务,并确保其在Android 4.0(Ice Cream Sandwich)及更高版本上完美运行。 一、服务基础 1. 创建服务:首先,你需要创建一个继承自`...

    Activity和Service生命周期及使用AIDL通信实例备份

    在Android应用开发中,Activity和Service是两个至关重要的组件,它们各自承载着不同的功能和应用场景。本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行...

    android service 简单实例源代码

    总之,Android Service是实现后台操作的重要工具,通过合理的使用和服务生命周期管理,可以为用户提供高效、稳定的后台服务。而 Binder 机制则让Service具备了跨进程通信的能力,极大地扩展了Service的应用场景。...

    android项目教程Service生命周期.pptx

    理解并熟练掌握Service的生命周期及其启动方式对于开发Android应用至关重要,尤其是处理需要在后台持续运行的任务或需要与其他应用进行通信的场景。通过合理使用Service,开发者可以创建高效且用户友好的应用程序。

    Android中service基本用法,生命周期2

    服务的有两种启动方式,对应两个生命周期 startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    "Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...

    appWidget启动Service

    5. **与Service通信**: 有两种主要方式与Service通信: - ** Binder: 如果Service需要与AppWidget或其他组件进行复杂交互,可以实现`Binder`接口,并在Service中提供。这样,其他组件可以通过`bindService()`方法...

    【Android studio】service在app直接退出下,整体输出情况,实现开机自启动,一直后台运行

    总结,要在Android Studio中实现Service在app退出后继续运行并开机自启动,需要理解Service的生命周期,正确配置BroadcastReceiver,以及采取保活策略。同时,对App的卡死崩溃进行监控和处理,以提升用户体验和应用...

    android-Service的2种应用

    了解了这两种启动Service的方式后,开发者可以根据实际需求选择合适的方法。`startService`适用于后台运行且不需要与启动它的组件保持连接的任务,而`bindService`则适用于需要实时交互的场景。在使用Service时,...

Global site tag (gtag.js) - Google Analytics