云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Android应用编程基础第28篇:Android四大组件

jxf315 2025-03-19 13:43:01 教程文章 47 ℃

前篇我们已经介绍了Activity以及其生命周期,我想大家已经有所了解了。今天我们就来讲讲四大组件中的Service。

Service作为Android中四大组件之一,拥有重要的地位。Service具有和Activity一样的级别,Service跟Activity的区别就是Service没有界面,是运行于后台的服务。这个运行“后台”是指不可见,不是指在后台线程中。事实上四大组件都是运行在UI线程中,都不能在各自的生命周期方法中执行耗时操作或者网络请求。 Service的应用场景还是比较多的,比如说在后台播放音乐、实时去更新当前地理位置的变化、新闻APP后台去离线缓存内容、进程间通信等。

Service主要可以分为两类:Local Service、Remote Service。比较常用的还是Local Service,应用于程序内部。可以通过startService()启动Service,通过stopService()结束服务。无论调用多少次startService(),只需一句stopService()就终结服务了。startService()和stopService()适用于服务和访问者之间没有交互的情况。如果服务和访问者之间需要方法调用或者传递参数,则需要使用 bindService() 和 unbindService() 方法绑定和解绑服务。采用 bindService() 方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate() 方法,接着调用 onBind() 方法,这个时候访问者和服务绑定在一起。 如果访问者要与服务进行通信,那么,onBind() 方法必须返回 Ibinder 对象。如果访问者退出了,系统就会先调用服务的 onUnbind() 方法,接着调用 onDestroy() 方法。如果调用 bindService() 方法前服务已经被绑定,多次调用 bindService() 方法并不会导致多次创建服务及绑定(也就是说 onCreate() 和 onBind() 方法并不会被多次调用)。如果访问者希望与正在绑定的服务解除绑定,可以调用 unbindService() 方法,调用该方法也会导致系统调用服务的 onUnbind() → onDestroy() 方法。

Remote Service 用于Android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用bindService()方法建立连接,并启动,以调用 unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。

下面我们就用Google官方的一张图来了解下Service的生命周期。

图1 Service的生命周期

1.当使用startService() 方法启动服务,生命周期如下:

onCreate() → onStart() → onDestroy()

onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次 startService() 或bindService() 方法,服务也只被创建一次。只有采用 startService() 方法启动服务时才会回调onStart()方法,该方法在服务开始运行时被调用。多次调用 startService() 方法尽管不会多次创建服务,但 onStart() 方法会被多次调用。onDestroy() 该方法在服务被终止时调用。

2.当采用 bindService() 方法绑定服务,生命周期如下:

onCreate() → onBind() → onUnbind() → onDestroy()

onBind() 只有采用 bindService() 方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用 bindService() 方法并不会导致该方法被多次调用。只有采用bindService() 方法绑定服务后解绑服务时才会回调onUnbind() 方法。该方法在调用者与服务解除绑定时被调用。

以上就是今天的内容,下篇我们将通过实例代码来深入讲解如何使用Service。谢谢大家!

文章为我们原创,转载请保留一下信息!

微价值网(公号vjiazhi),专注移动互联网、App推广、盈利以及Android/iOS等技术基础培训。

最近发表
标签列表