Android四大组件之Service

来源:互联网 发布:跑步记录软件 编辑:程序博客网 时间:2024/06/04 19:18

服务的特点是可以长期后台运行,一般没有应用程序界面,不容易被系统回收,即使被回收当内存足够时还会复活。当我们需要某些程序一直在后台运行时就用到了service。

1. Service的两种开启方式

1)startService的方式开启服务:

     startService---stopService

Oncreate()--> onStartCommand() --> ondestroy()

1.如果服务已经被创建,就不会再去执行oncreate方法了。

2.多次的开启服务只会执行 onStartCommand()

3.服务只能够被销毁一次,不能够被重复的销毁.

 

2)bindService的方式开启服务:

    bindService---unbindService

onCreate()-->onbind()-->onUnbind()-->ondestroy();

1. 如果服务被绑定了,并且没有解绑,服务就不会停止了。(停止不了了)
2. 如果服务被采用start的方式开启过,并且没有stop过,采用unbind服务, 不会让服务停止。

2. 编写一个Service

1.写个类 去继承 Service

publicclass HelloServiceextends Service {


2.重新 onCreate方法,  然后在oncreate方法中实现业务逻辑代码

这里实现的功能, 一般都是需要在后台一直 长期的运行的事儿.

例如:下载,放音乐

                                                                                        

3.服务写好了之后,需要到清单文件中进行注册.

  <!-- 注册服务 -->

        <service android:name="com.itheima.service.quickstart.HelloService"></service>

注意:服务也是运行在主线程中,服务不能够被阻塞. 如果要干耗时的事儿.那么也需要放到

子线程中去.


3. 绑定一个Service

只有绑定一个服务,才能调用该服务中的方法.

第一步

编写服务类

publicclass LocalServiceextends Service

第二步:

声明接口,在这个接口中声明一个方法.

   publicinterface Ibinder {


      public void callMethodInService(String account,int money);

}

第三步:

  声明MyBinder类,记得将小MyBinder  私有,然后让MyBinder继承 Binder,实现

Ibinder接口.

   privateclass MyBinder extendsBinderimplements Ibinder {

 

      @Override

      public void callMethodInService(String account,int money) {

        

        //调用服务中的方法

         methodInService(account, money);

      }

 

第四步:

onBind方法中 returnMyBinder的实例

   @Override

   public IBinder onBind(Intent intent) {

     

      System.out.println("服务绑定了...");

      //需要返回  IBinder的实例对象

      return new MyBinder ();

   }

 

第五步:  

绑定服务调用服务中的方法

Intent intent =new Intent();

      intent.setClass(this, LocalService.class);

      conn = new MyServiceConnection();

     bindService(intent,conn,BIND_AUTO_CREATE);

第六步:

      private class MyServiceConnection implements ServiceConnection{

 

              @Override

              public void onServiceConnected(ComponentName name, IBinderservice) {

                    

                    MyBinder = (Ibinder ) service;

                    

              }

 

              @Override

              public void onServiceDisconnected(ComponentName name) {

                    

              }

             

       }

第七步:

   //调用服务中的方法

   public void callService(View v){

     

      MyBinder .callMethodInService("lulu", 666666);

   }

第八步:

释放资源

//解绑服务

   public void unbindService(View v){

     

      unbindService(conn);

     

      conn=null;

   }






1 0
原创粉丝点击