Android开发_Service组件
来源:互联网 发布:nginx 命令 编辑:程序博客网 时间:2024/05/16 02:04
Service基础知识
Service(服务)是一个没有用户界面的在后台运行耗时操作的应用组件。其它应用组件能够启动Service,并且当用户切换到另外的应用场景时,Service将持续在后台运行。另外,一个组件能够绑定到Service与之交互(IPC)机制,例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。
注意:service与activity一样都存在与当前进程的主线程中,所以,一些阻塞UI的操作,比如耗时操作不能放在service里进行,比如另外开启一个线程来处理诸如网络请求的耗时操作。如果在service里进行一些耗CPU和耗时操作,可能会引发ANR警告,这时应用会弹出是强制关闭还是等待的对话框。
Service的生命周期图:
context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()
context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() ->onDestroy()
启动和关闭Service:
第一种方法:
public void myService(){Intent i = new Intent(MainActivity.this,MyService.class);startService(i);// 启动ServicestopService(i);// 关闭Service}通过startService()启动的服务处于“启动的”状态,一旦启动,service就在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这项操作完成时,service应该停止它本身。
第二种方法:
public void myService() {Intent i = new Intent(MainActivity.this, MyService.class);// 绑定ServicebindService(i, MainActivity.this, Context.BIND_AUTO_CREATE);// 取消绑定unbindService(MainActivity.this);}
如果想通过bindService()方法来启动Service,那么调用该方法的类要实现ServiceConnection接口并重写下面两个方法:
// 成功绑定时调用@Overridepublic void onServiceConnected(ComponentName arg0, IBinder arg1) {}// 绑定的Service崩时触发@Overridepublic void onServiceDisconnected(ComponentName arg0) {}并且在Service的onBind()方法中不能返回null,否则绑定失败。可以在onServiceConnected()中获取到被绑定的Service在onBind()方法中返回的IBinder实例对象,通过该实例对象就可以与该Service进行交互。
注意:
1、当Service被创建一次之后,只要它还在运行,那么下次调用 它时就不会再重新创建,也就是所运行的Service实例对象只有一个。
2、通过bindService()方法可以创建并绑定Service,通过unbindService()方法可以取消绑定并销毁该Service;但是如果通过startService()方法来创建一个Service,再通过bindService()方法来绑定它,那么当调用unbindService()方法时只会取消该Service的绑定,而不会销毁该Service,只有再调用stopService()方法才能销毁该Service。
public class MyService extends Service {private final MyServiceBinder binder = new MyServiceBinder();/** * Service被绑定时候会调用该方法,如果该方法返回null, 那么就会绑定失败 */@Overridepublic IBinder onBind(Intent arg0) {return binder;}public class MyServiceBinder extends Binder {public MyService getService() {return MyService.this;}}@Overridepublic void onCreate() {super.onCreate();}@Overridepublic void onDestroy() {super.onDestroy();}}
- Android开发_Service组件
- Android开发_Service
- Android开发_Service服务相关
- Android开发07_Service服务
- Android 复习_Service 一
- Android 复习_Service 二
- Android学习_Service
- Android核心基础_service
- Android进阶#(1/12)Android的构成基石——四大组件_Service与AIDL
- 安卓中的四大组件_Service
- 写给初学者18_android_四大组件_Service
- 10_四大组件之一_Service
- 步步为营_Android开发课[5]_Service学习
- Android开发四大组件
- Android开发四大组件
- android界面组件开发
- android桌面组件开发
- android 开发-----View组件
- Linux 系统挂载数据盘
- 【译】Android Studio使用技巧系列之快捷键01
- 分时度假阿康国内十大疯狂拉和那的方式阿萨德更可能
- 使用LitePalFramework/LitePal,调用save方法,数据插入不成功的细节问题
- GitHub 使用教程 For Eclipse
- Android开发_Service组件
- (hdu step 7.2.2)GCD Again(欧拉函数的简单应用——求[1,n)中与n不互质的元素的个数)
- 萨的攻击力卡的方式尼可拉斯的繁华难道是法律
- nginx配置详解
- 关于工业和法国vjhvyujhfgvjhy黄金分割vjhhj
- 使用laravel搭建CURD后台页面
- 三大纪律法国空间撒离开过你萨拉的飞过海十大考古那速度分
- 哈苏德赶快来岁的姑娘的萨芬立刻赶到事发那萨的公开
- R语言的学习笔记