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、付费专栏及课程。

余额充值