Service基础Activity与Service绑定

Service基础Activity与Service绑定

要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。

    现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:

    A. 编写需要运行在后台的类继承自android.app.Service。

      public class MyService extends Service {

        //服务生命周期 创建,开始,销毁
         /**
            * 创建
          */
         @Override
       public void onCreate() {
        // TODO Auto-generated method stub
          super.onCreate();
          Log.d("info", "Service Create");
         }
         /*
            * 开始
            * (non-Javadoc)
            * @see android.app.Service#onStart(android.content.Intent, int)
          */
       @Override
         public void onStart(Intent intent, int startId) {
          // TODO Auto-generated method stub
            super.onStart(intent, startId);
            Log.d("info", "Service Start");
           }
           /**
                * 销毁 
            */
        @Override
          public void onDestroy() {
          // TODO Auto-generated method stub
            super.onDestroy();
            Log.d("info", "Service Destroy");
           }

 

           /**
              * 当Service与Activity成功绑定时调用这个方法(non-Javadoc)
            * @see android.app.Service#onBind(android.content.Intent)
            */
         @Override
           public IBinder onBind(Intent arg0) {
            Log.d("info","Service Bind Success");
            return null;
            }
           /**
              * 重新绑定
            */
         @Override
           public void onRebind(Intent intent) { 
              super.onRebind(intent);
            Log.d("info","Service ReBind Success");
           }
           /**
              * 取消绑定
            */
         @Override
           public boolean onUnbind(Intent intent) {
             Log.d("info","Service Unbind Success");
            return super.onUnbind(intent);
            }
       }

 

    B.  在AndroidManifest.xml中配置<service>标签

      <service android:name=".MyService" android:enabled="true" ></service>

 

    

    C. 绑定服务:

      (1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成

           由该方法的第二个参数可以确定第二步要做什么

      (2) 编写类实现ServiceConnection 接口

          class MyServiceConnection implements ServiceConnection
            {

            @Override
            public void onServiceConnected(ComponentName arg0, IBinder arg1) {
             Log.d("info", "Service Connection Success");
             //成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型

            }

            @Override
            public void onServiceDisconnected(ComponentName arg0) {
             // TODO Auto-generated method stub
             Log.d("info", "Service Connection Filed");
             //连接失败执行
            }
     
          }

        (3)使用

             class BtnClick implements OnClickListener
              {
              @Override
            public void onClick(View arg0) {
             Intent intent = new Intent(Main.this,MyService.class);   
             MyServiceConnection myServiceConnection = new MyServiceConnection();
             switch (arg0.getId()) {
               case R.id.btnStart:        
                  Main.this.startService(intent);
                  break;
               case R.id.btnStop:    
                  Main.this.stopService(intent);
                  break;
               case R.id.btnBind:
                   Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);
                   break;  
               case R.id.btnUnBind:
                    //ServiceConnection必须是全局变量否则此处报错
                   Main.this.unbindService(myServiceConnection );
                    break;
               default:
                   break;
               }   
            }
     
            }

 

***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值