android-->service

新建学习群: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

----------------关键要学会如何查看开发文档,其他都是浮云!---------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值