zoukankan      html  css  js  c++  java
  • Android 开发之 bindService() 通信

    Service 启动方式有两种

    • startService(intent)
    • bindService(intent,conn,Context.BIND_AUTO_CREATE)

    startService(intent)

      生命周期: onCreate()-  >onStartCommand()->startService()->onDestroy()

      该方法启动service,会执行一个onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中进行处理。

    bindService(intent,conn,Context.BIND_AUTO_CREATE)

      生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

      绑定启动 service,

    使用该方法启动 service 分为几步

    1.在 Service 中,重写 onBind() 方法,返回一个 iBinder 对象。

    1     @Override
    2     public IBinder onBind(Intent arg0) {
    3         // TODO Auto-generated method stub
    4         Log.d("learnservice", "绑定服务...");
    5         return new MyBinder();
    6     }

    2.新建 BinderService 类继承 Service ,在 BindService 类里新建内部类 MyBinder 继承Binder ( Binder 实现 IBinder 接口)。该类中实现一些与 service 通信的方法,比如 setData()方法。

    1     public class MyBinder extends Binder{
    2         public void setData(String data){
    3             MyService.this.data=data;
    4         }
    5     }

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

     1 ServiceConnection conn=new ServiceConnection() {
     2         
     3         @Override
     4         public void onServiceDisconnected(ComponentName name) {
     5             // TODO Auto-generated method stub
     6             
     7         }
     8         
     9         @Override
    10         public void onServiceConnected(ComponentName name, IBinder service) {
    11             // TODO Auto-generated method stub
    12             binder=(MyBinder) service;   //该binder,需要在activity中声明。
    13             Log.d("learnservice", "绑定服务conn...");
    14         }
    15     };

    4.使用 button 的 onClick() 或者 activity 的 onCreat() 等触发 bindService() 方法

    1     @Override
    2     public void onClick(View v) {
    3         intent = new Intent(MainActivity.this,MyService.class);
    4         bindService(intent, conn, Context.BIND_AUTO_CREATE);
    5 }

    5.在 activity 中声明 service中的binder

    1 private MyService.MyBinder binder;

    6.同时把该 binder 放在 serviceConnection 的 onServiceConnection() 方法中

    1 binder=(MyBinder) service;

    这样,就完成了 Activity 和 Service 通过 bindService() 方法绑定并通信。

  • 相关阅读:
    windows 核心编程 第2章 U n i c o d e
    在一个类内不可以定义自身类的对象,为什么定义自身类的静态对象又是正确的
    将JPG图片绘制在对话框背景上:(这段代码绝对可以执行)
    小技巧给CEdit设置字体
    惠普 升级两年保修
    DoModal返回1,对话框不能显示,今天碰到项目在用unicode编码,和多字符编码时候出现的
    MFC 绘图
    CString类所有成员函数详解
    mysql 一些问题
    错误:不能实例化抽象类
  • 原文地址:https://www.cnblogs.com/liyiran/p/4638761.html
Copyright © 2011-2022 走看看