绑定服务:调用服务内部的方法

service:后台运行 没有界面的组件


Intent

startService();
stopService();



服务一旦被创建,就不会重新创建了.
服务的oncreate方法只会执行一次,如果服务已经开启,就不会再去执行oncreate方法
服务在停止的时候,会调用ondestroy方法

每一次开启服务的时候 都会调用 onStartCommand()  onStart();




服务有两种开启方式:
1. startService(); 服务一旦开启就跟开启者(activity)没有什么关系.activity挂了,
服务还会开心的在后台运行.

2. bindService();  服务跟activity就有了千丝万缕的联系. 如果调用者activity挂了
服务也跟着挂了.  不求同时生,但求同时死.
服务只能被显示的解除绑定一次,多次的解除绑定服务 应用程序会报异常

 

 

 

 

 

 

----------------------

绑定服务调用服务里面方法的流程:
1. 在activity 采用bindService方式开启服务...

2. 写一个实现类 MyConn implements   ServiceConnection

3.  接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法

4.  在service代码 实现 onBind方法  返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)

5.  在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法

6. 获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法

 

 

 

 

 

-------------------------------------------------------------------------------------------

public   class   MainActivity   extends   Activity {

       private   ServiceConnection    conn ;
       private   IService    mybinder ;
      
       @Override
       protected   void   onCreate(Bundle savedInstanceState) {
               super .onCreate(savedInstanceState);
            setContentView(R.layout.   activity_main );
      }

       /**
       * 开启服务:已绑定服务的方式获取服务中的代理人,间接调用服务内的方法
       */
       public   void   start(View view){
            System.   out .println(   "服务开启..." );
          Intent intent=   new   Intent(getApplicationContext(),MyService. class   );
            conn =   new   MyConn();
          bindService(intent,   conn ,   BIND_AUTO_CREATE );
           // onBindService(conn);    conn=null;    关闭服务并将服务置为空
      }
      
      

         // 2.实现serviceConnection接口
       private   class   MyConn   implements   ServiceConnection{

               //服务成功绑定时
               @Override
               public   void   onServiceConnected(ComponentName name, IBinder service) {
                     mybinder = (IService) service;      //获取代理人对象
                  System.   out .println(   "Activity得到服务返回的代理人....."   );
            }

               //当服务异常终止....失去连接的时候调用的方法
               @Override
               public   void   onServiceDisconnected(ComponentName name) {
            
                  
            }
            
            
            
      }
      
      
      
      
      
      
       /**
       * 调用服务内方法
       *   @param   view
       */
      public   void   getMethod(View view){
      
       mybinder .Method(15000);
    }
      
      
}



-------------------------------------------------------------------------------------------



       /**
       * 成功绑定服务时调用的方法
       */
       @Override
       public   IBinder onBind(Intent arg0) {
            System.   out .println(   "服务被成功绑定时....返回代理人对象"   );
            
               return   new   MyBind();
      }
      
      
       /**
       * 将服务分方法交给代理人代理
       *   @author   Administrator
       *
       */
       public   class   MyBind   extends   Binder{
      
       /**
       * 服务内的方法
       *   @param   money
       */
         public   boolean   Method(   long   money){
            
               if (money>10000){
                  System.   out .println(   "卖给你清华大学毕业证了...."   );
                  Toast. makeText(getApplicationContext(),   "卖给你清华大学毕业证了...."   , 0).show();
                     return   true ;
            }   else {
                  System.   out .println(   "没钱还想买证书?......"   );
                  Toast. makeText(getApplicationContext(),   "没钱还想买证书?......" , 0).show();
                     return   false ;
                  
            }
            
            
      }
      
      }

}


--------------------------------------------------------------------------------------


public   interface   IService {

       public   boolean   Method(   long   money);
}






 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值