Service的概念与使用
来源:互联网 发布:做网站 知乎 编辑:程序博客网 时间:2024/05/17 01:44
概述:
Service即服务,与Activity,ContentProvider,BroadcastReceiver并称Android程序的四大组件。
在程序后台运行,不可见,难以被Android系统自动杀死。
服务分为本地服务和远程服务,本地服务即为在程序内部使用的服务,而远程服务是在Android系统内的程序与程序之间使用。
用途举例:
后台保持播放音乐、记录地理位置变动、监听部分动作等等。
注意事项:
运行在主线程,所以不能用来做耗时操作,可以在服务中开子线程来做耗时操作。
本地服务的启动与停止:
有两种启动方式,分别是start和bind。
start方式是由startService方法启动,stopService方法,stopSelf方法,stopSelfResult方法停止。
bind方式则是bindService方法,要停止则要先unbindService。
远程服务:
远程服务用于系统内的程序和程序之间,需要定义IBinder接口。
生命周期:
根据服务的启动方式,服务的生命周期由两部分组成。
start方式启动的服务的生命周期:onCreate()->onStartCommand()->running->onDestroy()->结束。
bind方式启动的服务的生命周期:onCreate()->onBind()->服务和启动源绑定->onUnbind()->onDestroy()->结束。
running时,可以自行停止或通过启动源停止,当执行了stopService方法,会调用onDestroy()。
当执行了unbindService(),会调用onUnbind()。
特点:
Start方式特点:
服务跟启动源无联系,也无法得到服务对象。
Bind方式特点:
通过Ibinder接口实例,返回ServiceConnection对象给启动源,通过ServiceConnection对象的相关方法能得到Service对象。
Start方式启动(例):
//先要在记录文件中进行记录:<service android:name="所写的Service类"> </service>服务类:
public class Startservice extends Service{ @Override public IBinder onBind(Intent intent) //这里要重写onBind方法 { return null; }}Activity中:
Intent intent=new Intent(当前Activity对象,服务类的class); startService(intent); ... stopService(intent);
Bind方式启动(例):
依旧是先在Android程序的记录文件中进行记录。
服务类:
public class MyBind extends Service { public class MyBinder extends Binder //定义MyBinder内部类。 { public MyBind getit() { return MyBind.this; } } public IBinder onBind(Intent intent) { return new MyBinder(); } public void unbindService(ServiceConnection conn) { super.unbindService(conn); }}
Activity中:
MyBind mb; ...... ServiceConnection con=new ServiceConnection() { public void onServiceDisconnected(ComponentName name) //Service的启动源与Service的连接丢失时,该方法会被调用。 { } public void onServiceConnected(ComponentName name,IBinder service) //Service的启动源与Service连接成功后,该方法会被调用。 { mb=((MyBinder)service).getit(); //然后后面就可以用这个mb来调用这个服务类里定义的部分方法。 } }; ...... Intent intent2=new Intent(当前Activity对象,MyBind.class); bindService(intent2,con,Service.BIND_AUTO_CREATE); ...... unbindService(con);
注:如果start和bind方式一起使用,要注意先stopService,再unbindService。
- Service的概念与使用
- web service 的概念
- block 的概念与使用
- protocol 的概念与使用
- Fragment的概念与使用
- jsonp的概念与使用
- Service(服务)-概念的整理
- service介绍之service的使用与本地通信
- 多态的概念,特点与使用
- Fragment的概念与使用(一)--基本概念
- C# Attribute的概念与使用浅析
- oracle 序列的概念与使用步骤
- linux sudo命令的概念与使用
- IO流的概念与使用
- C++之类的概念与使用
- Fragment的概念与使用(一)--基本概念
- [概念]KVO的概述与使用
- 线程与进程的概念、使用
- iOS开发之多线程总结
- 使用 Timer 实现任务调度(定时任务)
- 51nod 1314 定位系统 树形dp
- 罗素语录
- 浅析Cookie中的Path与domain
- Service的概念与使用
- bat脚本教程
- iPhone X的简单适配
- android对战的象棋小游戏,使用GridView做棋盘
- Git服务器搭建全过程分步详解
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
- Linux top命令的用法详细详解
- 友盟集成第三方步骤(微信、QQ、微博)
- Activiti Modeler整合之后,部署之后流程图片显示乱码问题分析与解决