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

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

 

 

 

 

 

 

原创粉丝点击