• 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下tensorflow的安装
    scala时间处理
    TensorFlow3学习笔记1
    Xcode安装多个版本并自动切换版本
    sdk 升级报错-bash: sdkmanager: command not found
    gerrit关闭了管理员权限的解决办法
    ssh 登陆远程nohup java 脚本无效,但设置生效后日志中文乱码
    git clone 报错 sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publickey).
    linux 环境下编写的代码在windows平台编译时大面积报错
    [iOS-Release] 自动修改构建号
  • 原文地址:https://www.cnblogs.com/liyiran/p/4638761.html
Copyright © 2020-2023  润新知