android studio 使用 aidl(二)异步回调
基础使用请移步 android studio 使用 aidl (一)
首先建立在server端建立两个aidl文件
ITaskCallback.aidl 用于存放要回调client端的方法
// ITaskCallback.aidl
package com.txy.umpay.aidl;
// Declare any non-default types here with import statements
interface ITaskCallback {
void actionPerformed(int actionId);
}
ITaskBinder.aidl 用于存放供给client端调用的方法
// ITaskBinder.aidl
package com.txy.umpay.aidl;
// Declare any non-default types here with import statements
import com.txy.umpay.aidl.ITaskCallback;//一定要注意导包,不然Make就报错了
interface ITaskBinder {
boolean isTaskRunning();
void stopRunningTask();
void registerCallback(ITaskCallback cb);
void unregisterCallback(ITaskCallback cb);
}
接下来Build-->Make Module app就能生成好相应的java文件了
接下来 看下MAIDLService里面怎么写的,贴一下关键代码:
private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() {
public void stopRunningTask() {
}
public boolean isTaskRunning() {
return false;
}
public void registerCallback(ITaskCallback cb) {
if (cb != null) {
mCallbacks.register(cb);
try {
for (int i = 1; i < 6; i++) {
cb.actionPerformed(i);
Thread.sleep(5000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void unregisterCallback(ITaskCallback cb) {
if (cb != null) {
mCallbacks.unregister(cb);
}
}
};
final RemoteCallbackList<ITaskCallback> mCallbacks = new RemoteCallbackList<ITaskCallback>();
接下来把ITaskCallback.aidl和ITaskBinder.aidl 一起拷贝到客户端,同样Build-->Make Module app就能生成好相应的java文件了
在来看下客户端是怎么调用的:(此处都是关键代码,全的代码都是android studio 使用 aidl (一)这里有)
绑定代码:
//使用意图对象绑定开启服务
Intent intent = new Intent();
//在5.0及以上版本必须要加上这个
intent.setPackage("com.txy.umpay.aidl");
intent.setAction("com.txy.umpay.aidl.MAIDLService");
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
调用代码这个是在线程里面调用的:
try {
if (service != null) {
service.registerCallback(mCallback);
}
} catch (RemoteException e) {
e.printStackTrace();
}
mCallback的代码:
private ITaskCallback mCallback = new ITaskCallback.Stub() {
public void actionPerformed(int id) {
Log.e("123", "calculation" + id);
}
};
运行结果:
下一篇:android studio 使用 aidl(三)权限验证
android studio 使用 aidl(二)异步回调的更多相关文章
- android studio 使用 aidl(三)权限验证
这篇文章是基于android studio 使用 aidl (一) 和 android studio 使用 aidl(二) 异步回调 下面的代码都是简化的,如果看不懂请先移步上2篇文章 网上的东西太坑 ...
- android studio 使用 aidl(一)基础用法
最近公司需要开发一个项目用的到aidl,之前研究过eclipse版本的,但是好久了一直没用,现在需要捡起来,但是现在都用android studio了,所以查了下资料 都不是很全,我在这里总结一下,方 ...
- Android studio 使用心得(四)—android studio 多渠道打包(二)
Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来 ...
- Android Studio系列教程二--基本设置与运行
Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...
- Android studio使用心得(二)— 打包签名apk发布
1.—–Android Studio菜单 Build->Generate Signed APK 2.——Create new.. 3.——-跟eclipse里面一样,添加keystore 信 ...
- 【转载】Android Studio Service AIDL 详解
公司产品之前IM这块存在很多问题,消息到达率低,加上协议上有些问题,丢消息频繁,所以需要重构IM,AIDL不能解决以上问题.好吧!那AIDL可以解决什么问题?什么是AIDL? 什么是AIDL? AID ...
- Android Binder机制中的异步回调
“Binder通信是同步而不是异步的”,但是在实际使用时,是设计成客户端同步而服务端异步. 看看Framwork层的各service类java源码便会知道,在客户端调用服务端的各种方法时,通常会传递一 ...
- Android Studio 使用教程(二十五)之运行Android Studio工程
一.Android虚拟设备入口 上期我们使用了Android Studio创建了HeloWorld工程,要想运行该工程,首先需要一个Android虚拟设备来模拟Android程序的运行. 重新打开An ...
- 第二章:Android Studio概述(二)[学习Android Studio汉化教程]
The Main Menu Bar 主菜单栏 主菜单栏位于Android Studio的最上面,你几乎可以利用主菜单和其子菜单来执行任何操作.不像Android Studio中其他的一些菜单,主菜单 ...
随机推荐
- .Net Core微服务——网关(1):ocelot集成及介绍
网关是什么 简单来说,网关就是暴露给外部的请求入口.就和门卫一样,外面的人想要进来,必须要经过门卫.当然,网关并不一定是必须的,后端服务通过http也可以很好的向客户端提供服务.但是对于业务复杂.规模 ...
- Spring Security OAuth2 单点登录
1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...
- 前端yyyy-mm-dd格式 计算一段工作日后,日期
//计算一段工作日后,日期getWorkday(dat, itervalByDay) { function formatTen(f) { if (parseInt(f, 10) < 10) { ...
- Spring Boot程序中@JsonIgnoreProperties与@JsonIgnore基本使用
问题由来: springboot项目中定义了很多类,我们在rest返回中直接返回或者在返回对象中使用这些类,spring已经使用jackson自动帮我们完成这些的to json.但是有时候自动转的js ...
- C#生成新浪微博短网址 示例源码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using DotN ...
- Go defer 特性和使用场景
golang 的 defer 语句用于延迟调用.defer 会在当前函数返回之前执行 defer 注册的函数.比如 defer func_defer() 这样语句会让你注册一个函数变量到 defer ...
- Linux服务——二、配置NFS及autofs自动挂载服务
一.NFS服务配置步骤 NFS的作用:能够使两台虚拟机之间实现文件共享.数据同步 准备:主机名.网络.yum源 Server端: 1.安装nfs-util和rpcbind:(图形化自带) [root@ ...
- dart系列之:dart中的异步编程
目录 简介 为什么要用异步编程 怎么使用 Future 异步异常处理 在同步函数中调用异步函数 总结 简介 熟悉javascript的朋友应该知道,在ES6中引入了await和async的语法,可以方 ...
- <C#任务导引教程>练习一
//1,定位显示ASCI码值为30到119的字符using System;class Program{ static void Main() { int i, n = 0; ...
- BootStrap中模态框踩坑
在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...
