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)


相关推荐

  • service mesh 架构_MESHOR

    service mesh 架构_MESHOR什么是servicemesh根据LinkerdCEOWilliamMorgan定义,ServiceMesh是用于处理服务间通信的基础设施层,用于在云原生应用复杂的服务拓扑中实现可靠的请求传递。在实践中,ServiceMesh通常是一组与应用一起部署,但对应用透明的轻量级网络代理。基本结构图如下:在实践中,ServiceMesh基本来说是一…

    2022年10月27日
  • msf win10漏洞_Kali对Windows2008/7的MS17010漏洞测试(MSF自带模块)

    msf win10漏洞_Kali对Windows2008/7的MS17010漏洞测试(MSF自带模块)Kali-TheVulnerablityofMS17010forWindowsServer2008R20x01说明其实这个MSF自带的exp模块还是挺让人伤脑筋的,因为它支持的OS并不是很多,也就WindowsServer2008和Win7能用一下,比他们版本低的xp/2003以及比他们版本高的8/2012都不可用,但是纯粹对于Win2008/7而言,这个方案还是比较方便…

  • Java设计模式之结构型:桥接模式

    Java设计模式之结构型:桥接模式

  • 大学课程 | 《微机原理与接口技术》知识点总结[通俗易懂]

    大学课程 | 《微机原理与接口技术》知识点总结[通俗易懂]文章目录第一章微型计算机基础概论第一讲关于第二讲微型计算机系统组成第三讲微机工作过程第四讲常用数制第五讲编码第六讲数及其运算第七讲基本逻辑运算和逻辑门第八讲基本逻辑运算及其门电路第二章微处理器与总线第九讲8088/8086微处理器第十讲8088的主要引线及其内部结构第十一讲8088CPU内部寄存器第十二讲实模式下的存储器寻址第十三讲8088系统总线第三章指令系统概述第十四讲8088/8086指令系统第十五讲指令的寻址方式第十六讲数据传送指令第四章算术运算,逻辑运算与

  • MySql 5.7的默认密码

    MySql 5.7的默认密码

  • 关于html5的PostMessage的用法总结

    关于html5的PostMessage的用法总结  大家都知道,网页直接传递数据可以使用ajax请求来完成,今天我总结下我学习的postMessage是如何完成跨页面请求数据的呢?首先,postMessage是html5新增的一个解决跨域的一个方法。那他是如何使用的呢?这里我把一个案例分享出来把。看下面的代码:test.html<!DOCTYPEhtml><html><head> <titl…

发表回复

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

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