android-->service
来源:互联网 发布:神灯治疗仪 知乎 编辑:程序博客网 时间:2024/06/08 10:18
新建学习群:79369965 ,欢迎大家一起来共同学习
service是application fundamentals之一 ,所以它的重要性就不言而喻了!
本文概要:
1:使用startService()启动service (机制分析)
2:使用bindService()启动service(机制分析)
3:区别
4:注意事项
1:这种方式跟启动一个activity是一样的原理
①:创建一个类实现Service (ServiceModel extends Service) 复写int onStartCommand(Intent intent, int flags, int startId)(其他的方法可以选择复写)
②:注册service(<service android:name=".ServiceModel"></service>)
③:驱动此service
btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(ServiceTest.this, ServiceModel.class); startService(intent); } });
机制分析:当驱动startService()时,系统会回调一个onStartCommand方法,然后你可以在此方法里做你需要做的操作
2:将应用程序和service绑定(这里是将一个activity和service绑定)
①:从这里我们可以看到需要返回一个IBinder对象 IBinder onBind(Intent intent) 在API中我们可以发现这个是一个接口,实现了这个接口的类叫Binder在此我们自定义一个类来继承此类如下:
public class LocalBinder extends Binder {public ServiceModel getService() { return ServiceModel.this; } }//该类的母的是 :返回了一个service对象
②:这里主要满足这个bindService函数。这个函数需要的是一个Intent对象,一个ServiceConnection对象,以及一个flag 这里主要 谈一下第二个参数
当我们的service中的onBind方法返回的时候如果连接上了会调用这个ServiceConnection里面的onServiceConnected这个方法,在这个方法里的第二个参数就是onBind()返回的那个IBinder对象.而这个对象中我们有创建了一个方法getService() 用来获得这个service对象所以可以在activity中操作这个service了,完成了绑定!
bindService.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent();intent.setClass(ServiceTest.this, ServiceModel.class);bindService(intent, conn = new ServiceConnection(){public void onServiceConnected(ComponentName name,IBinder service) { Log.i(TAG , "---onServiceConnected---"); ServiceModel model =((ServiceModel.LocalBinder) service).getService(); model.model_methed();}public void onServiceDisconnected(ComponentName name) {}}, BIND_AUTO_CREATE);}});
③:机制分析:通过IBinder onBind(Intent intent) 返回的IBinder ,与ServiceConnection中的onServiceConnected返回的service相对应来完成service的绑定操作
3:区别
前者与应用程序无关,也就是说前者的应用程序的关闭与否与service无关。而后者与应用程序共存亡(onServiceDisconnected)。
4:注意事项:在service里面不要进行非常耗时的操作,因为系统会调用几秒钟后就返回了。这时可以考虑使用单独开其他的线程,或者使用API中定义的IntentService这个类是继承了service而且也实现了多线程异步的机制 。
PS:service是一个比较复杂的框架,在此只是蜻蜓点水,具体可以查看开发文档比如这里没有介绍:Remote Messenger Service
----------------关键要学会如何查看开发文档,其他都是浮云!---------------------------------
- [android]service中再启service
- android service
- Android Service
- android service
- Android Service
- Android service
- android service
- Android Service
- Android Service
- Android service
- Android:Service
- Android Service
- [Android] Service
- android service
- android service
- android service
- android service
- Android Service
- Ajax实现二级联动菜单
- JavaScript多线程编程简介
- 分布式文件系统 Mogilefs 安装步骤
- 手动快速解决Firefox扩展/插件的兼容性问题
- C++中的inline关键字
- android-->service
- 使用存储过程造批量数据
- 学习Oracle,笔记一:Oracle数据库监听配置
- 第17 题:题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
- 做自己感兴趣的事情,才最开心
- nosql
- ActiveX控件空对象, 创建窗体
- Tomcat6
- DWR+Hibernate无刷新判断用户是否存在