这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。
1、服务的创建、启动与停止
1、创建一个继承自Service的类
2、重写onCreate、onStartCommand和onDestroy方法
3、在AndroidManifest.xml中注册此服务(和注册activity方式一样)
4、需要操作服务的时候,也是通过intent来startService和stopService
oncreate():在服务创建的时候被调用,而onStartCommand()不仅在服务被创建的时候调用,还会在服务已经开启的情况下再次开启服务时调用
onDestroy():在服务被停止的时候调用
2、服务与活动进行通信 可以通过将service和activity进行绑定,来控制service的运行逻辑。 1、MyService类中添加如下内容: class DownloadBinder extends Binder{ //1、创建一个继承自Binder的类,内部提供public方法(也就是需要控制的逻辑) public void startDownload(){ Log.d("hahaha", "startDownload..."); } public void getProgress(){ Log.d("hahaha", "stopDownload..."); } } private DownloadBinder mbinder = new DownloadBinder(); //2、创建此类的实例,并且由onBind返回 @Override public IBinder onBind(Intent intent) { return mbinder; } 2、MainActivity类中添加如下内容: private MyService.DownloadBinder downloadBinder; //用来接收service和activity的绑定实例 private ServiceConnection connection = new ServiceConnection() { //创建回调实例,当服务被创建或者销毁时锁所回调的方法 @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder)service; downloadBinder.startDownload(); downloadBinder.getProgress(); } }; ... case R.id.bt2: Intent bindIntent = new Intent("xxxxx"); bindService(bindIntent, connection, BIND_AUTO_CREATE); //将服务和回调实例相绑定,第三个参数为绑定后自动创建服务实例, break; //这会使得MyService的onCreate方法得到执行,但onStartCommand不会执行 case R.id.bt3: //也就是说服务被创建并且回调绑定的方法之后,服务的主体还没有开始执行 unbindService(connection); //当startService被调用的时候服务才真正的执行 break; |
也就是说在服务运行的过程中,我们想让服务去执行一些特定的事情,但是在之前的学习中服务被创建运行起来之后我们就无法操控它了,所以我们可以在service中创建一个内部类,类中创建实现一些对外提供的方法(譬如startDownload和getProgress),然后将这个内部类的实例通过onBind返回。
这个实例就是activity和service通信的桥梁。
接着在activity中创建与service的会话实例connection,此实例内部有两个方法:
onServiceConnected(ComponentName name, IBinder service);
//第二个参数为service里onBind返回的内部类实例,通过将service向下转型可以调用其对外提供的方法,绑定时回调
onServiceDisconnected(ComponentName name)Android;
//系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时)调用该方法。注意:当客户端取消绑定时,系统“绝对不会”调用该方法。
3、服务的生命周期
当只调用了startService()时,再次调用stopService()即可调用onDestroy();
当只调用了bindService()时,再次调用unbindService()即可调用onDestroy();
当调用了startService和bindService时,必须先后调用stopService()和unbindService()才会回调onDestroy();
热点新闻
讲师博文
这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。 1、服务的创建、启动与停止 1、创建一个继承自Service的类 2、重写onCreate、onStartCommand和onDestroy方法 3、在AndroidManifest.xml中注...
这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。
1、服务的创建、启动与停止
1、创建一个继承自Service的类
2、重写onCreate、onStartCommand和onDestroy方法
3、在AndroidManifest.xml中注册此服务(和注册activity方式一样)
4、需要操作服务的时候,也是通过intent来startService和stopService
oncreate():在服务创建的时候被调用,而onStartCommand()不仅在服务被创建的时候调用,还会在服务已经开启的情况下再次开启服务时调用
onDestroy():在服务被停止的时候调用
2、服务与活动进行通信 可以通过将service和activity进行绑定,来控制service的运行逻辑。 1、MyService类中添加如下内容: class DownloadBinder extends Binder{ //1、创建一个继承自Binder的类,内部提供public方法(也就是需要控制的逻辑) public void startDownload(){ Log.d("hahaha", "startDownload..."); } public void getProgress(){ Log.d("hahaha", "stopDownload..."); } } private DownloadBinder mbinder = new DownloadBinder(); //2、创建此类的实例,并且由onBind返回 @Override public IBinder onBind(Intent intent) { return mbinder; } 2、MainActivity类中添加如下内容: private MyService.DownloadBinder downloadBinder; //用来接收service和activity的绑定实例 private ServiceConnection connection = new ServiceConnection() { //创建回调实例,当服务被创建或者销毁时锁所回调的方法 @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder)service; downloadBinder.startDownload(); downloadBinder.getProgress(); } }; ... case R.id.bt2: Intent bindIntent = new Intent("xxxxx"); bindService(bindIntent, connection, BIND_AUTO_CREATE); //将服务和回调实例相绑定,第三个参数为绑定后自动创建服务实例, break; //这会使得MyService的onCreate方法得到执行,但onStartCommand不会执行 case R.id.bt3: //也就是说服务被创建并且回调绑定的方法之后,服务的主体还没有开始执行 unbindService(connection); //当startService被调用的时候服务才真正的执行 break; |
也就是说在服务运行的过程中,我们想让服务去执行一些特定的事情,但是在之前的学习中服务被创建运行起来之后我们就无法操控它了,所以我们可以在service中创建一个内部类,类中创建实现一些对外提供的方法(譬如startDownload和getProgress),然后将这个内部类的实例通过onBind返回。
这个实例就是activity和service通信的桥梁。
接着在activity中创建与service的会话实例connection,此实例内部有两个方法:
onServiceConnected(ComponentName name, IBinder service);
//第二个参数为service里onBind返回的内部类实例,通过将service向下转型可以调用其对外提供的方法,绑定时回调
onServiceDisconnected(ComponentName name)Android;
//系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时)调用该方法。注意:当客户端取消绑定时,系统“绝对不会”调用该方法。
3、服务的生命周期
当只调用了startService()时,再次调用stopService()即可调用onDestroy();
当只调用了bindService()时,再次调用unbindService()即可调用onDestroy();
当调用了startService和bindService时,必须先后调用stopService()和unbindService()才会回调onDestroy();
相关推荐
全国咨询热线:400-611-6270
?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号