Service
2015-08-26 15:47
316 查看
Service与Activity都是Android系统中的运行单元,只是后者有接口布局文件作为其操作界面,而前者无操作界面,专门负责运行一项制定的工作,直到完成或被其控制程序停止。
Service与Thread很相似,都是独立运行的对象,也是幕后运行无界面,Thread是java内建类,而Service是Android根据其特性和架构设计的,所以在Android中优先建议使用Service。
Service的两种调用方法:startService();bindService()。
Service的生命周期:
startService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onDestroy()
bindService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onUnbind()、onDestroy()
1、新建一个继承Service的新类,利用右键Source > Override/Implement Methods 重写onCreate()、onStartCommand()、onDestroy()、onUnbind():
其中onBind()方法必须传回类中建立的一个LocalBinder类的对象,否则无法完成Bind Service的动作。LocalBinder是内部类,继承Binder类,其中有getService方法,传回MyService对象,就是根据这个方法才能调用bindService()时取得MyService对象。
2、在AndroidManifest.xml中注册Service:
3、在程序中启动Service:
startService():
bindService():
首先建立ServiceConnection对象,取得Service对象,并存入定义在主程序中的MyService属性;
onServiceConnected()在bind Service时系统调用;onServiceDisconnected()在Service对象不正常结束时运行,一般情况不允许。
2、建立Intent对象并指定要启动的Service类,调用bindService()。
Service与Thread很相似,都是独立运行的对象,也是幕后运行无界面,Thread是java内建类,而Service是Android根据其特性和架构设计的,所以在Android中优先建议使用Service。
Service的两种调用方法:startService();bindService()。
Service的生命周期:
startService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onDestroy()
bindService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onUnbind()、onDestroy()
1、新建一个继承Service的新类,利用右键Source > Override/Implement Methods 重写onCreate()、onStartCommand()、onDestroy()、onUnbind():
package com....; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class MyService extends Service { public class LocalBinder extends Binder { MyService getService() { return MyService.this; } } private LocalBinder mLocBin = new LocalBinder(); @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return mLocBin; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub return super.onUnbind(intent); } }
其中onBind()方法必须传回类中建立的一个LocalBinder类的对象,否则无法完成Bind Service的动作。LocalBinder是内部类,继承Binder类,其中有getService方法,传回MyService对象,就是根据这个方法才能调用bindService()时取得MyService对象。
2、在AndroidManifest.xml中注册Service:
<service android:name=".MyService" android:enabled="true" />
3、在程序中启动Service:
startService():
Intent it = new Intent(类名称.this,Service类名称.class); startService(it); ... stopService(it);
bindService():
首先建立ServiceConnection对象,取得Service对象,并存入定义在主程序中的MyService属性;
onServiceConnected()在bind Service时系统调用;onServiceDisconnected()在Service对象不正常结束时运行,一般情况不允许。
private ServiceConnection mServConn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub //取得Service对象 MyService mMyServ = ((MyService.LocalBinder)service).getService(); } };
2、建立Intent对象并指定要启动的Service类,调用bindService()。
Intent it = new Intent(类名称.this,Service类名称.class); bindService(it, mServConn, BIND_AUTO_CREATE); ... unbindService(mServConn);
相关文章推荐
- 64位系统 安装oracle
- Menu学习,和如何实现一步关闭所有的activity退出应用程序
- HttpClient 4.3教程(转载)
- java获取汉字拼音首字母
- iOS链式编程框架介绍之LinkBlock
- 《招聘一个靠谱的iOS》面试题参考答案(下)
- S5PV210内存初始化
- tab标签切换(无炫效果,简单的显示隐藏)
- session丢失返回登陆页
- php操作mysql常用的一些内置函数
- javascript深入理解js闭包
- MySql:jsp插入mysql数据库中文乱码
- Json对象与Json字符串互转(4种转换方式)
- 乐观锁与悲观锁
- 切圆角裁减图片
- 关于asyncbox插件open方法的简单使用
- 图像处理和计算机视觉中的经典论文
- POJ 2342 Anniversary party(树形DP入门)
- Office 365 IT Professional —— 配置External User Sharing
- iOS iOS8推送消息的快速回复处理