黑夜 黑夜给了我黑色的眼睛,我却用它寻找光明~ 传值方式 AIDL是同意跨进程传递值的,一般来说有三种方式: - 广播:这样的算是比較常见的一种方式了,传递小数据不错 - 文件:这个是保存到文件里.然后读取,传递大数据不错 - Service Bind模式.这个算是居中的一种方式,只是效率要高的多,唯一麻烦的是编写代码较为麻烦. 特别是复杂类型数据传递麻烦. 其是,另一些其它的办法进行数据传递.另外传递也并非仅仅能够使用一种,能够採用几种结合的方式进行. 今天要说的就是Service Bind进…
AIDL Service //跨进程调用Service    一个APK想调用另一个APK中的Service 如何实现AIDL //定义两个进程之间的通信接口 Demo1 传递简单数据 AidlService public class AidlService extends Service { private CatBinder catBinder; Timer timer = new Timer(); String[] colors = new String[] { "红色", &q…
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Android程序包括两个进程,所以涉及到跨进程通信的问题.现将Android中的跨进程通信方式总结例如以下. Android中有4种跨进程通信方式,各自是利用AIDL Service.ContentProvider.Broadcast.Activity实现. 1.利用AIDL Service实现跨进程通信…
Android Interface Definition Language (AIDL) 1.In this document Defining an AIDL Interface Create the .aidl file Implement the interface Expose the interface to clients Passing Objects over IPC Calling an IPC Method See also Bound Services AIDL (Andr…
http://blog.csdn.net/lmj623565791/article/details/38461079 如果知道AIDL和binder的原理,可以简单写一个不依赖AIDL的跨进程通信 不知道的话可以看这里:http://www.cnblogs.com/qlky/p/6720405.html 先看AIDL要做什么: 在binderProxy的onTransact中接收数据,并返回结果. 在自定义service的stub中实现函数,并返回stub 所以如果只用binder,在自定义se…
在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv…
一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentProvider实现了不同应用之间的跨进程调用,但ContentProvider主要是提供数据的共享(如sqlite数据库),那么我们希望跨进程调用服务(Service)呢?Android系统采用了远程过程调用(RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言…
上一篇文章中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户端显然是不合适的.另外,Messenger用来进程间进行数据传递但是却不能满足跨进程的方法调用,接下来我们来使用AIDL来实现跨进程方法调用 1. 创建AIDL文件 我们将项目的目录结构调为Android模式,在java同级目录创建aidl文件夹,在文件夹中创建一个包名和应用包名一致的包  我们先创…
在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法.可是我们能发现Messenger是以串行的方式来处理client发来的信息,假设有大量的消息发到服务端,服务端仍然一个一个的处理再响应client显然是不合适的.另外,Messenger用来进程间进行数据传递可是却不能满足跨进程的方法调用.接下来我们来使用AIDL来实现跨进程方法调用,此前我们都是用Eclipse来实现的,这次我们看看在Android Studi…
什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现. 与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口. Android的四大组件中的三个(Activity.Broadcast…
首先定义对象类,并实现Parcelable接口,实现接口内的几个方法,看代码,Person.java package com.example.u3.aidltest; import android.os.Parcel; import android.os.Parcelable; /** * Created by U3 on 2015/3/11. */ public class Person implements Parcelable { private String name; public S…
在Android应用开发中,我们会碰到跨进程通信的情况,例如:你用QQ通讯录打电话的时候会调用系统的拨号应用.某些新闻客户端可以将新闻分享到QQ.微信等应用,这些都是跨进程通信的情况.简而言之,就是一个应用调用了另一个应用,并传递了一定的数据.在Android中有Activity.Content Provider.BroadcastReceiver.Service四大组件,巧的是Android进程间通信也离不开这四大组件(也有说是AIDL机制,但是现在还分不清Service和AIDL的区别(/…
由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于android系统中4种应用程序组件:Activity.Content Provider.Broadcast和Service. 其中Activity可以跨进程调用其他应用程序的Activity: Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然也可以对其他…
http://www.cnblogs.com/punkisnotdead/p/5062631.html 起因 是这个blog 提到了 用webview 的时候 用开启子进程的方式 可以极大避免内存泄露.然后有很多人私信我 这种情况下 如何 相互通信的问题.当然广播是一个比较不错的选择,只不过广播的方法 能够传递的值比较有限.messenger 也只能做 单向传递消息.(当然你如果用2个 是可以双向的.单独的messenger是只能单向的). so,这里给出一个简单的小例子,教你如何处理 AIDL…
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content Provider使用.通过它能够訪问上面所说的数据,比如非常多音乐播放器中的扫描功能事实上就用到了Content Provider功能(当然.也有的播放器是自己去实现更底层的功能).这种优点是统一管理.比方添加了某个音频文件,底层就会将这种变化通知Content Provider,从而当应用程序訪问时…
在AIDL文件中并不是所有的数据类型都可以使用,AIDL支持的数据类型如下: 基本数据类型(int.long.char.boolean.double等) String和CharSequence List:只支持HashMap,HashMap的key和value的类型都必须被AIDL支持 Parcelable:所有实现了Parcelable接口的对象 AIDL:AIDL接口本身也可以在AIDL文件中使用 要注意的是,自定义的Parcelable对象和AIDL对象必须要显示import进来,不管他们…
Q:小程序怎么把页面data里的数据传到另外的页面? 或者小程序怎么吧表单里的数据传到另外的页面?A:1.可以使用url传递数据. 例如在A页面中传递数据,需要注意的是,wx.switchTab中的url不能传参数. wx.navigateTo({url:'../pageB/pageB?name=raymond&gender=male'}).在B页面中接收数据,通过onLoad的option:Page({onLoad:function(option){console.log(option.nam…
在服务器与客户端之间通信,json数据是一种常用格式,本文主要在服务器端构建数据,在客户端接收显示,并且在listview上显示出来 服务器端的构建 简单的javabean与返回结果函数与插入函数略过 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html…
大概用这些吧: IPC  Handler    Messager   Bundle  service(binder)   messageconnection ,thead.getXXX.getId 注意message的replayTo方法和oxxxMessage方法可以发送和获得message,message中getData()可以获得bundle对象, bundle可以封装参数key-value,如果是复杂的object对象参数,那么可以考虑intent的父接口重写几个方法实现…
1 //1.发送窗体 2 procedure TForm2.Button1Click(Sender: TObject); 3 var 4 h: HWND; 5 Size: Integer; 6 CopyDataStruct: TCopyDataStruct; 7 begin 8 h := FindWindow(nil, '接收窗口'); { 按标题查找目标窗口 } 9 if h > 0 then 10 begin 11 Size := ByteLength(Edit1.Text) + 2; {…
大家都知道在Android中通过AIDL可以跨进程调用Service中的数据,网上也有很多实例,但是大部分实例都是关于基本数据类型的远程调用,很少讲到复杂数据的调用,今天我用一个例子来演示一下怎样用AIDL Service 传递复杂数据. 我们分2步开始: 第一步:部署我们的服务端,也就是Service端: 1:在Service端我先自定义2个类型:Person和Pet.因为我们需要跨进程传递Person对象和Pet对象,所以Person类和Pet类都必须实现Parcelable接口,并要求在实…
跨进程如何通讯?两个进程无法直接通讯,通过Android系统底层间接通讯.基于service的aidl实现跨进程通讯. 什么叫AIDL? Android interface definition language,Android接口定义语言 什么时候使用?AIDL IPC 多线程 多应用 Binder IPC 没有多线程 多应用 message IPC 没有多线程 使用 eclipse Androidstudio new-folder-AIDL Folder 生成AIDL目录 在目录中 new…
不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递message对象,在message中放入我们需要传递的数据你就可以实现跨进程通讯和传递数据.废话不多说,直接上代码. 首先是服务端: public class Ser extends Service{ @Override public IBinder onBind(Intent intent) {…
Android 开发过程中,基于功能隔离.进程安全.进程保活等等考虑,我们经常需要为应用划分进程,然后不得不面临跨进程通信和跨进程共享数据的挑战. 跨进程通信 相对来说,跨进程通信比较简单,常用的方式有: 1.全局广播 广播是最简洁的跨进程通信方式,发送——接收广播即可完成异步通信. 2.AIDL 使用AIDL进行跨进程调用.通信是不错的选择,能够支持更复杂的接口调用,通信是同步完成的.但是实现上需要与其他进程的Service建立连接,然后通过AIDL定义的接口进行调用,实现上稍显复杂. 笔者经…
不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递message对象,在message中放入我们需要传递的数据你就可以实现跨进程通讯和传递数据.废话不多说,直接上代码. 首先是服务端: public class Ser extends Service{ @Override public IBinder onBind(Intent intent) {…
一.问题描述 如何在Android中实现不同应用之间的通讯(既跨进程进行调用)?Android提供了多种实现方式,使我们可以实现跨进程访问Activity.通过ContentProvider跨进程访问其他应用的数据.通过Broadcast可以向android系统中所有应用程序发送广播.使用AIDL实现跨进程的Service.下面我们就使用ContentProvider实现跨进程访问数据,并可对数据进行增.删.改.查 二.应用实现 使用ContentProvider实现数据共享,主要是共享应用的S…
本项目用于验证 Android 是否能够跨进程渲染 View,最终实现了在子进程创建WebView,主进程显示的功能. 一.跨进程渲染的意义 有一些组件比如 WebView 如果在主进程初始化,会大大增加主进程的内存占用. 部分组件设计时只支持特定进程,但是又想在别的进程显示该组件的View 一些其它限制... 二.跨进程渲染的实现 1.提供一个Surface 跨进程渲染,需要一个Surface对象,本项目中使用SurfaceView提供. 而Surface实现了Parcelable接口,也就意…
原文同一时候发表在我的博客 点我进入还能看到很多其它 需求背景 近期接到这样一个需求,须要和别的 App 进行联动交互,比方下载器 App 和桌面 App 进行联动.桌面的 App 能直接显示下载器 App 内的下载任务进度和状态. 寻找解决方式 从需求上知道了,主要问题在怎样解决跨进程的通信上边. AIDL AIDL 即 Android Interface Definition Language的缩写,是专为 Android 中跨进程通信接口的描写叙述语言.优缺点非常明显,长处是稳定,快.An…
1.简介 Messenger,顾名思义即为信使,通过它可以在不同进程中传递Message对象,通过在Message中放入我们需要的入局,就可以轻松实现数据的跨进程传递了.Messenger是一种轻量级的IPC方案,其底层实现是AIDL. Messenger的使用方法很简单,它对AIDL进程了封装,并且由于它一次只处理一个请求,因此在服务端我们不需要考虑同步的问题.   2.实现跨进程通信 1)服务端进程 首先我们需要在服务端创建一个Service来处理客户端的连接请求,同时创建一个Handler…
cp from : http://weishu.me/2016/01/12/binder-index-for-newer/ 毫不夸张地说,Binder是Android系统中最重要的特性之一:正如其名“粘合剂”所喻,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种及其方便的跨进程通信机制. 理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder挂钩:如果对Binder不甚了解,那么就…