Android开发:bindService的使用方法

Android开发:bindService的使用方法http://blog.csdn.net/zhou_wenchong/article/details/51302574bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。   bindService方式的一般过程:

大家好,又见面了,我是你们的朋友全栈君。

http://blog.csdn.net/zhou_wenchong/article/details/51302574

bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。

    bindService方式的一般过程:

1.新建Service类BindService。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。MyBinder提供方法返回BindService实例。

    public class MyBinder extends Binder{

        
        
public BindService getService(){

            
return BindService.this;
        }
    }

实例化MyBinder得到mybinder对象;

重写onBind()方法:

 @Override

 public IBinder onBind(Intent intent) {

  return mybinder;
 }

2.在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法

ServiceConnection conn=new ServiceConnection(){

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {

  }

  @Override
  public void onServiceDisconnected(ComponentName name) {

  }

};

3.在Activity的onCreate()方法里,新建Intent,并绑定服务

        Intent intent=new Intent(MainActivity.this,BindService.class); 


        bindService(intent, conn,BIND_AUTO_CREATE);

 

4.在Activity的onDestroy里面,添加

unbindService(conn);

如果不加这一步,就会报Android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的异常。

 

bindService()的执行过程如下:

bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()

code

[java] 
view plain  
copy

  1.  1:调用者  
  2.   
  3. package com.zhf.local;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.ComponentName;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.content.ServiceConnection;  
  10. import android.os.Bundle;  
  11. import android.os.IBinder;  
  12.   
  13. /** 
  14.  * 此例的目的就是拿到MyService的引用,从而可以引用其内部的方法和变量 
  15.  *  
  16.  * @author Administrator 
  17.  *  
  18.  */  
  19. public class LocalServiceActivity extends Activity {  
  20.     /** Called when the activity is first created. */  
  21.     private MyService myService;  
  22.   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.   
  28.         Intent intent = new Intent(this, MyService.class);  
  29.         bindService(intent, connection, Context.BIND_AUTO_CREATE);  
  30.     }  
  31.   
  32.     private ServiceConnection connection = new ServiceConnection() {  
  33.   
  34.         @Override  
  35.         public void onServiceDisconnected(ComponentName name) {  
  36.             myService = null;  
  37.         }  
  38.   
  39.         @Override  
  40.         public void onServiceConnected(ComponentName name, IBinder service) {  
  41.             myService = ((MyService.MyBinder) service).getService();  
  42.             System.out.println(“Service连接成功”);  
  43.             // 执行Service内部自己的方法  
  44.             myService.excute();  
  45.         }  
  46.     };  
  47.   
  48.     protected void onDestroy() {  
  49.         super.onDestroy();  
  50.         unbindService(connection);  
  51.     };  
  52. }  
  53.   
  54. 2:服务者  
  55.   
  56. package com.zhf.local;  
  57.   
  58. import android.app.Service;  
  59. import android.content.Intent;  
  60. import android.os.Binder;  
  61. import android.os.IBinder;  
  62.   
  63. public class MyService extends Service {  
  64.     private final IBinder binder = new MyBinder();  
  65.   
  66.     @Override  
  67.     public IBinder onBind(Intent intent) {  
  68.         return binder;  
  69.     }  
  70.   
  71.     public class MyBinder extends Binder {  
  72.         MyService getService() {  
  73.             return MyService.this;  
  74.         }  
  75.     }  
  76.   
  77.     public void excute() {  
  78.         System.out.println(“通过Binder得到Service的引用来调用Service内部的方法”);  
  79.     }  
  80.   
  81.     @Override  
  82.     public void onDestroy() {  
  83.         // 当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用  
  84.         super.onDestroy();  
  85.     }  
  86.   
  87.     @Override  
  88.     public boolean onUnbind(Intent intent) {  
  89.         // 当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用  
  90.         System.out.println(“调用者退出了”);  
  91.         return super.onUnbind(intent);  
  92.     }  
  93. }  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133436.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号