跨应用绑定Service并通信:

1、(StartServiceFromAnotherApp)AIDL文件中新增接口:

  void setData(String data);

  AppService文件中实现接口:

  public IBinder onBind(Intent intent) {
    return new IAppServiceRomoteBinder.Stub() {
      @Override
      public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
      }
      @Override
      public void setData(String data) throws RemoteException {
      }
    };
  }

2、(StartServiceFromAnotherApp)修改AppService内部数据:

  private String data = "默认信息";

  public void setData(String data) throws RemoteException {
    AppService.this.data = data;
  }

3、((StartServiceFromAnotherApp)AppService

  onCreat写线程,onDestroy中销毁,每隔一秒输出data,方便测试内部数据的变化:

  private boolean running = false;

   public void onCreate() {
    super.onCreate();
    System.out.println("Service started");

    new Thread(){
      @Override
      public void run() {
        super.run();
        running = true;
        while(running){
          System.out.println(data);
        try {
          Thread.sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
            }
        }
      }
    }.start();
  }

  public void onDestroy() {
    super.onDestroy();
    System.out.println("Service destroy");
    running = false;
  }

4、(AnotherApp)主布局:

  <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="这是另一个应用中的数据"
    android:id="@+id/etInput" />

  <Button
    android:text="同步数据到绑定的服务中"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnSync" />

5、(AnotherApp)进入MainActivity,按钮及输入文本的监听:

   private EditText etInput;

   etInput = (EditText) findViewById(R.id.etInput);

   findViewById(R.id.btnSync).setOnClickListener(this);

6、如何通过Binder方便地执行远程函数?把StartServiceFromAnotherApp中AIDL文件拷贝到AnotherApp中,保持包名一致。

7、(AnotherApp)进行数据最后处理:

  private IAppServiceRomoteBinder binder = null;

  case R.id.btnUnbindService:
    unbindService(this);
    binder = null;
    break;
  case R.id.btnSync:
    if(binder != null){
      try {
      binder.setData(etInput.getText().toString());
        } catch (RemoteException e) {
           e.printStackTrace();
        }
    }

  

  public void onServiceConnected(ComponentName name, IBinder service) {
      //binder = IAppServiceRomoteBinder(service); 两个类定义所在地址不一样,不能强制类型转换
      binder = IAppServiceRomoteBinder.Stub.asInterface(service);
  }

Android中AIDL的理解与使用(二)——跨应用绑定Service并通信的更多相关文章

  1. Android中AIDL的理解与使用(一)——跨应用启动/绑定Service

    AIDL(Android Interface Definition Language)--安卓接口定义语言 一.startService/stopService 1.同一个应用程序启动Service: ...

  2. Android中Context的理解及使用(二)——Application的用途和生命周期

    实现数据共享功能: 多个Activity里面,可以使用Application来实现数据的共享,因为对于同一个应用程序来说,Application是唯一的. 1.实现全局共享的数据App.java继承自 ...

  3. (七)Android中AIDL的应用与理解

    一.跨应用启动Service Intent serviceIntent=new Intent();serviceIntent.setComponent(new ComponentName(" ...

  4. Android中AIDL通信机制分析

    一.背景 ·1.AIDL出现的原因 在android系统中,每一个程序都是运行在自己的进程中,进程之间无法进行通讯,为了在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需 ...

  5. Android 中AIDL的使用与理解

    AIDL的使用: 最常见的aidl的使用就是Service的跨进程通信了,那么我们就写一个Activity和Service的跨进程通信吧. 首先,我们就在AS里面新建一个aidl文件(ps:现在AS建 ...

  6. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  7. Android中一个经典理解误区的剖析

    今天,在Q群中有网友(@广州-包晴天)发出了网上的一个相对经典的问题,问题具体见下图. 本来是无意写此文的,但群里多个网友热情不好推却,于是,撰此文予以分析. 从这个问题的陈述中,我们发现,提问者明显 ...

  8. Android中的一些基础知识(二)

    这几天在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细,这里我只是翻译 ...

  9. Android笔记(四十) Android中的数据存储——SQLite(二) insert

    准备工作: 我们模拟一个注册的页面,先看UI 我们需要创建一个数据库:user,数据库包含表user,user表包含字段id.username.password.mobilephone MainAct ...

随机推荐

  1. Mysql查询语句使用select.. for update导致的数据库死锁分析

    近期有一个业务需求,多台机器需要同时从Mysql一个表里查询数据并做后续业务逻辑,为了防止多台机器同时拿到一样的数据,每台机器需要在获取时锁住获取数据的数据段,保证多台机器不拿到相同的数据. 我们My ...

  2. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  3. 【Pyrosim案例】02:简单燃烧

    1 案例说明 本案例介绍一个简单的燃烧模拟. 本案例通过指定热释放率(Heat Release Rate,HRR)来定义一个500kW的燃烧火焰.利用热释放率来定义燃烧火焰在火灾安全工程中描述火焰的一 ...

  4. Microsoft Windows* SDK May 2010 或较新版本(兼容 2010 年 6 月 DirectX SDK)GPU Detect

    原文链接 下载代码样本 特性/描述 日期: 2016 年 5 月 5 日 GPU Detect 是一种简短的示例,演示了检测系统中主要显卡硬件(包括第六代智能英特尔® 酷睿™ 处理器产品家族)的方式. ...

  5. L2-011. 玩转二叉树

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA28AAAHQCAIAAAC5rsUiAAAgAElEQVR4nO3dzYts953n+foXcpUL0Q

  6. ActiveMQ笔记(4):搭建Broker集群(cluster)

    上一篇介绍了基于Networks of Borkers的2节点HA方案,这一篇继续来折腾Networks of Brokers,当应用规模日渐增长时,2节点的broker可能仍然抗不住访问压力,这时候 ...

  7. Android中关于cpu/cpuset/schedtune的应用

    Android中关于cpu/cpuset/schedtune的应用都是基于进程优先级的,根据不同优先级划分进程类型.AMS(ActivityManagerService)和PMS(PackageMan ...

  8. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  9. spring 拦截器

    1.mvc.xml <!-- 自定义拦截链配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping p ...

  10. Visual Stdio 无法直接启动带有“类库输出类型”的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!

    j解决方法:项目-属性-应用程序-输出类型-Windows应用程序