最近学习了一下Service,主要看的官方文档,感觉记忆的东西太多,脑袋一团乱,特此总结一下:
Service的关键点主要有:如何创建一个Service、如何实现控件与Service之间的通信、Started和Bound之间的区别 以及Service的生命周期。
一、Service
Service是一种隐藏的应用控件,它长时间的在后台运行,其他用户可以通过开启或是绑定到一个Service,从而与之进行交互。可以通过自己或是其他控件停止开启的Service,绑定的Service会在没有绑定控件时停止。另外,Service的运行优先级仅比获得焦点的Activity低,所以一般只会在系统资源严重不足的时候被kill。
二、创建Service
要创建一个Service,必须是实例化一个Service的子类,Service本身是一个抽象类。
在子类中,关键是要复写几个重要的回调函数,以此来控制Service的生命周期,以及实现开启或是绑定方式。
1、onCreate()
类似Activity的onCreate(),在Service第一次被创建时,执行这个回调函数,如果该Service已经在运行了,则不调用该函数。
2、onDestroy()
同理,当Service停止不用或被销毁时,系统会调用这个函数来释放资源。
3、onStartCommand(),API5以前的版本是onStart()
如果只想让Service被绑定,就可以不用实现该函数。当实现了改函数, 其他控件可以通过调用startService()
来开启该Service,从此该Service就一直运行,即使创建开启它的控件已经被销毁。此时必须要控制Service的结束,可以在它完成功能后调用stopSelf()
来结束,或是通过其他控件调用stopService() 来结束它。
4、onBind()
该函数必须被实现,如果不允许该Service被绑定,可以在该函数中返回null。其他控件可以通过bindService() 来绑定到该Service,但是这个函数必须返回一个IBinder对象,该对象是客户与Service的交互接口。绑定的Service不用管理它的结束,系统会在没有任何控件绑定它时结束它。
当然,也可以通过继承Service的子类IntentService来创建一个Service的实例。相对于Service,IntentService会创建一个辅助线程来处理传递到onStartCommand()中的所有intents,它会创建一个辅助队列,每次从队列中传递一个intent到onHandleIntent() 中,这样就防止了多线程。而且,在所有intent都处理完后,系统就会结束该Service,所以不用管理它的资源回收。
当实现一个IntentService子类的时候,会得到一个默认的onBind()函数,返回null,以及一个默认的onStartCommand()函数,它将发送Intent到辅助队列,再发送到onHandleIntent() ,也就是说最简单的情况下,只需要实现onHandleIntent()。
三、Service的两种形式
当实现了Service的一个子类,并且在manifest中声明了它之后,我们就可以启动或是绑定这个Service了,当然也可以同时进行这两个动作,只要实现了(二)中的回调函数。
1、Started Service
正如前面所说,其他控件可以通过调用 startService()
来启动一个Service,并通过传递Intent到onStartCommand()
来指定是哪个Service,并与之进行交互。这种形式的Service必须管理它的结束。
2、Bound Service
而绑定到一个Service则是通过调用 bindService()
函数,并传递相应的Intent,并且回调函数onBind()必须返回一个IBinder对象来与客户进行交互。而解除绑定则是调用unbindService() 函数,当没有控件与之绑定时,Service就将被销毁。
四、Service的生命周期
生命周期包括完整周期:创建( onCreate()
)和销毁( onDestroy()
),活动周期:启动( onStartCommand()
)/绑定( onBind()
)和停止(onDestroy())/解除绑定( onUnbind()
),停止一个Started Service时,没有特别的回调函数,就只有onDestroy()。
五、小结
通过初步学习,了解到Service的创建方式:实现Service子类或是实现IntentService子类;Service的两种形式及区别;以及与Service之间的交互方法:传递Intent,绑定方式下的IBinder对象;Service的生命周期:完整的和活动的。
分享到:
相关推荐
Java Web Service 总结 Java Web Service 是一种基于 XML 的分布式系统架构,它使得不同的系统和应用程序可以通过标准的协议和数据格式进行通信和交互。下面是 Java Web Service 的总结,涵盖了 Web Service 的原理...
一篇对于android service的详细总结
总结一下,Service是Android中用于后台操作的重要组件,而多进程守护则是确保Service在各种情况下都能持续运行的一种策略。正确理解和运用Service的多进程模式,可以帮助开发者构建更稳定、健壮的应用程序。在实践中...
Android Service是Android操作系统中的一个重要组件,用于在后台长时间运行任务,即使用户界面已经关闭。Service不同于线程,尽管它们都可以用于执行后台操作,但Service提供了更高级别的抽象和与应用程序交互的能力...
Java Service Wrapper 使用总结 Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper ...
service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service总结》
本示例"Android Service大总结Demo"将深入探讨Service的使用,包括如何启动、绑定服务,以及实现跨进程间的通信。我们将详细讲解以下几个关键知识点: 1. **Service的基本概念**: - Service是一种没有用户界面的...
6.2.5 初识ActivityManagerService总结 6.3 startActivity分析 6.3.1 从am说起 6.3.2 AMS的startActivityAndWait函数分析 6.3.3 startActivityLocked分析 6.4 Broadcast和BroadcastReceiver分析 6.4.1 ...
总结,Activity绑定Service在Kotlin中是一项重要的技能,它允许我们在不显示用户界面的情况下执行后台任务并保持与Activity的通信。通过理解Service的生命周期、使用Kotlin的特性以及正确的通信机制,开发者可以构建...
总结: Service是Android系统中处理后台任务的关键组件,了解其启动与停止机制、生命周期以及不同启动方式的应用场景,对于开发者来说至关重要。合理使用Service,可以提高应用的用户体验和稳定性。同时,要注意处理...
#### 六、总结 `service_name`是Oracle数据库中一个非常重要的参数,它对于实现客户端与数据库实例之间的正确连接至关重要。通过合理配置`service_name`,可以确保数据访问的安全性和高效性。此外,理解`service_...
总结来说,`Service`和`Activity`之间的数据传递可以通过Intent参数、BroadcastReceiver或Binder实现。BroadcastReceiver适用于不频繁的数据交换,而Binder适合需要频繁交互且在同一个进程的情况。开发者应根据具体...
总结来说,`StartService` 方式启动的 `Service` 主要用于执行后台任务,不提供与客户端的直接交互。在实际应用中,我们需要考虑服务的生命周期管理,避免过度消耗系统资源。同时,结合使用 `BroadcastReceiver` ...
在Android开发中,AppWidget是桌面...总结来说,AppWidget启动Service是一种常见的Android应用场景,它允许用户通过桌面小部件便捷地触发后台服务执行任务。正确设计和实现这种交互,可以提高应用的可用性和用户体验。
总结,IOTService是一款强大的物联网管理工具,集成了串口服务器设备连接、邮件报警、远程升级等多种功能,旨在简化物联网系统的部署和维护。用户通过详细的使用说明和测试指导,能够高效地利用IOTService提升物联网...
总结起来,Start Service是Android中用于启动后台任务的重要工具,正确理解和使用它可以提升应用的用户体验,但同时也需要注意资源管理和生命周期管理,以保证应用的稳定性和效率。在`ServiceDemo`项目中,我们可以...
- **初识PowerManagerService总结**:总结了PowerManagerService的基本功能和启动过程。 - **PMSWakeLock分析**: - **WakeLock客户端分析**:解析了客户端如何请求和释放WakeLock。 - **PMS acquireWakeLock分析...