- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 四大组件之Service
Android 四大组件之Service
分类:程序语言|标签:Android|日期: 2016-03-15 02:00:06
---恢复内容开始---
1,Service的生命周期
INCLUDEPICTURE \d /create/article \* MERGEFORMATINET
onCreate第一次创建service的时候调用。
onStartCommand启动service的时候调用。
onStart(This method was deprecated in API level 5. Implement? HYPERLINK /reference/android/app/Service.html \l onStartCommand(android.content.Intent, int, int) onStartCommand(Intent, int, int)?instead.)
onDestroy销毁的时候调用。
2,进程优先级(由高到低):(红色字体的两个进程是经常被系统回收的两个进程)??? 1. Foreground process 前台进程 用户正在操作的应用程序的进程.??? 2. Visible process??? 可视进程? 用户可以看到, 但无法进行操作的应用程序的进程.??? 3. Service process??? 服务进程? 后台运行的服务所在的进程.(如果有Activity再前台,则该进程属于前台进程)??? 4. Background process 后台进程? 最小化应用程序, 托管到后台运行.??? 5. Empty process????? 空进程??? 已经退出的程序, 没有任务在运行.
3,service的使用注意事项:
1.是否可以在service里写一些费时操作? 不能。如果有耗时操作可能会导致ANR的发生。 (onReceive方法内是否可以写耗时操作?原因)? ? ?? 原因是:service这些回调方法的代码是运行在主线程上的。
2.IntentService 该服务已经启动了一个线程,你不必再启动了。你要做的事情直接写到onHandleIntent,它会在子线程里处理。
三道面试题:
service和activity的区别。
activity可以和用户交互,service可以在后台做些事情而不用跟用户交互。
activity在退出程序后会退出,而对于service,如果没有显示的调用停止服务,那么服务就没有结束,它仍在后台运行。
最大的区别应该是:没有服务运行的后台进程叫后台进程,而有服务的后台进程叫服务进程。安卓系统的内存回收经常会回收掉优先级低的后台进程。
既然程序已经退出,为什么还保留空进程?
优化用户体验。当用户下次启动该APP的时候,无需重新给分配进程,节约时间,提高效率。只有当内存不足时采取回收资源。
service和线程都是在后台运行,那他们之间有什么关系?
service和线程不是一个范畴的东西。service是四大组件之一,是一个特殊的类,在service中可以另起线程。service本身不是运行在一个单独进程中,默认情况下service是运行在主线程中的。
service的具体使用:
在activity中启动service与停止service
1 //启动服务
2 Intent intent = new Intent(this,MyService.class);
3 startService(intent);
4 //停止服务
5 Intent intent = new Intent(this, MyService.class);
6 stopService(intent);
?
2,activity通过绑定service,可以调用服务内的方法(activity如果关闭的话,service也会结束)
//在Activity中调用本地服务(同一个应用中的服务)中的方法:
//1.调用bindservice去绑定服务,传递一个连接桥对象
//2.在service内部去继承一个Binder,实现的子类 。该子类可以随意调用service内的方//法。
//3.在onBind方法中,返回该子类的实现。
//4.当绑定ok,连接桥建立成功之后,连接桥对象的onServiceConnected 会被调用到, 这里面会返回一个IBinder对象,该对象就是onBind返回的那个。
//5.拿到这个IBinder对象之后,强转为MyBinder接收,然后调用其方法即可。
//绑定和解绑服务
public void bindservice(View view){
文档评论(0)