Android Service启动方式

1 启动方式
Service 的启动方式主要有两种,分别是 startService bindService
其中, StartService 使用的是同一个 Service, onCreate() 只执行一次,
onStartCommand() 也会执行多次。使用 bindService 启动时, onCreate() onBind() 都只会调用一次。
使用 startService 启动时是单独开一个服务,与 Activity 没有任何关系,而 bindService 方式启动时,
Service 会和 Activity 进行绑定,当对应的 activity 销毁时,对应的 Service 也会销毁。
2 生命周期
2.1 startService
onCreate() :如果 service 没被创建过,调用 startService() 后会执行 onCreate() 回调;如果 service
已处于运行中,调用 startService() 不会执行 onCreate() 方法。
onStartCommand() :多次执行了 Context startService() 方法,那么 Service
onStartCommand() 方法也会相应的多次调用。
onBind( ) Service 中的 onBind() 方法是抽象方法, Service 类本身就是抽象类,所以 onBind() 方法
是必须重写的,即使我们用不到。
onDestory() :在销毁 Service 的时候该方法。
3 Service 不被杀死
 
3.1 onStartCommand 方式中,返回 START_STICKY
调用 Context.startService 方式启动 Service 时,如果 Android 面临内存匮乏,可能会销毁当前运行的
Service ,待内存充足时可以重建 Service 。而 Service Android 系统强制销毁并再次重建的行为依赖于
Service onStartCommand() 方法的返回值,常见的返回值有如下一些。
START_NOT_STICKY :如果返回 START_NOT_STICKY ,表示当 Service 运行的进程被 Android 系统强制   杀掉之后,不会重新创建该Service
START_STICKY :如果返回 START_STICKY ,表示 Service 运行的进程被 Android 系统强制杀掉之后,
Android 系统会将该 Service 依然设置为 started 状态(即运行状态),但是不再保存 onStartCommand
方法传入的 intent 对象,即获取不到 intent 的相关信息。
START_REDELIVER_INTENT :如果返回 START_REDELIVER_INTENT ,表示 Service 运行的进程被
Android 系统强制杀掉之后,与返回 START_STICKY 的情况类似, Android 系统会将再次重新创建该
Service ,并执行 onStartCommand 回调方法,但是不同的是, Android 系统会再次将 Service 在被杀掉
之前最后一次传入 onStartCommand 方法中的 Intent 再次保留下来并再次传入到重新创建后的 Service
onStartCommand 方法中,这样我们就能读取到 intent 参数。
3.Service使用场景

 Service的优点是系统原生支持,使用方便;创建进程方便;可以提供给系统内其他App使用;优先级高,当App退到后台后不宜被杀死。缺点是由于启动Service涉及到多次IPC,运行效率不高,而且受限于系统接口,使用不够灵活。
线程池的优点是运行效率高,配置和使用灵活。缺点是多进程实现不方便, 由于Android实现了一套进程托管机制,我们不能直接创建一个新的进程,而只能通过四大组件的形式创建新的进程。

 一般普通的异步任务,比如网络请求,数据库或者文件相关操作,我们都会使用线程池的方式来做,因为这样使用的系统开销小,运行效率高,而且随着业务逻辑的复杂度增加,扩展性也更强。然而,对于一些特殊场景,比如进程保活,使用第三方SDK服务比如地图,IM等,就需要使用Service来实现,因为这些服务一般与App主进程隔离开,需要运行在新进程中以防止App主进程发生异常崩溃时,牵连第三方服务也挂掉。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Service启动方式有两种: 1. startService()方法:通过调用该方法启动ServiceService会一直运行直到被stopService()或stopSelf()方法停止。 2. bindService()方法:通过调用该方法绑定ServiceService会一直运行直到所有绑定的客户端都解除绑定,然后Service会被销毁。 ### 回答2: Android ServiceAndroid 中一种特殊的组件,它可以在后台运行任务,而不影响用户交互。Android Service 启动方式有三种:startService、 bindService、 和 startForegroundService。 1. StartService 启动方式 StartService 是最基本的启动方式,它使用 Intent 启动 Service。通过调用 startService() 方法,系统会在后台启动一个 Service,并将它添加进 Service 栈中。接下来 Service 会在后台一直运行直至被停止停止(调用 stopService() 方法)。StartService 启动方式可以用于处理一些不需要与 Activity 交互的后台任务。 2. BindService 启动方式 与 StartService 不同,BindService 启动方式是用于与 Service 进行交互的。它使用 bindService() 方法,绑定一个 Service 实例到指定的 Activity 上下文。Service 绑定后,它和 Activity 就可以进行通信,通过 ServiceConnection 接口回调方法进行数据交换和通信。 3. StartForegroundService 启动方式Android 8.0(API level 26)及以上版本,应用不能后台无限制运行,系统会对后台运行的应用进行限制。StartForegroundService 启动方式是用于在前台启动 Service 并让 Service 继续在后台运行,避免被系统杀掉。通常用于需要进行长时间任务处理的 Service,或者需要向用户展示的服务。对于 StartForegroundService 启动方式,使用 startForeground() 方法在方法中接收一个 id 和 Notification 对象参数,用于展示服务运行的状态。 总结: 三种启动 Service方式都各有用途,应根据需求进行选择。StartService 启动方式非常适用于不需要与 Activity 交互的后台任务;BindService 启动方式适用于 Activity 和 Service 之间进行交互和通信;StartForegroundService 启动方式则适用于需要长时间运行任务或向用户展示服务状态的场景。 ### 回答3: Android Service是一种在后台执行长时间运行任务的应用程序组件。它通常没有用户界面,可以在不影响前台活动的情况下继续运行。该服务可以独立运行,也可以与其他应用程序组件(如活动和广播接收器)一起使用。在Android中,启动Service有三种方式: 1. Context.startService()方法 使用该方法,可以启动一个Service,并在后台运行它。它不会返回结果,但可以与Service进行通信,以便进行更改或停止Service。这种方式适用于启动一些后台任务,例如在手机锁定后继续运行下载任务。 2. Context.bindService()方法 通过该方法,可以将客户端与Service绑定。该方法返回一个IBinder对象,该对象允许客户端以编程方式调用Service方法并获得结果。这种方式适用于需要在应用程序间进行数据交换的情况,例如通过Service来获得其他应用程序的数据。 3. 通过Manifest文件声明的方式 可以在应用程序的Manifest文件中声明Service,并指定其当应用程序启动时应自动启动。这种方式适用于需要在应用程序启动时或设备启动启动Service的情况,例如在设备启动启动音乐播放器的Service。 以上是几种常见的Android Service启动方式,可以根据应用程序的需求选择合适的方式进行启动

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值