AIDL深入学习-创新互联
Android多进程总结一:生成多进程(android:process属性) - lixpjita39的专栏 - CSDN博客请添加链接描述
专注于为中小企业提供成都做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业筠连免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。以下两种方式都是基于bindService启动服务。
1)一种简单的实现跨进程的方式(Binder,Messenger)
http://www.open-open.com/lib/view/open1469493830770.html
使用Messenger的好处就是如果有多个请求,不会冲突,会将请求放入请求队列中一个一个执行任务。
首先要明确哪个是客户端,哪个是服务端。
Service是声明在服务端工程里的,因为要被客户端工程调用到,所以是隐式声明的:
`
`
服务端工程安装好后,开启客户端工程,绑定服务端声明的服务。(服务端服务不一定要事先开启了,声明了即可。)
注意: 客户端工程隐式调用服务端开启的那个service,传给intent的包名是服务端的包名,并非自己的包名。
`public class MainActivity extends AppCompatActivity {
static final int MSG_SAY_HELLO = 1;
Messenger mService = null;
boolean mBound;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
//接收onBind()传回来的IBinder,并用它构造Messenger
mService = new Messenger(service);
mBound = true;
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
mBound = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.sample_text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sayHello(view);
}
});
}
//调用此方法时会发送信息给服务端
public void sayHello(View v) {
if (!mBound) return;
//发送一条信息给服务端
Message msg = Message.obtain(null, MSG_SAY_HELLO, 1, 2);
try {
mService.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
protected void onStart() {
super.onStart();
//绑定服务端的服务,此处的action是service在Manifests文件里面声明的
Intent intent = new Intent();
intent.setAction("com.lypeer.messenger");
//不要忘记了包名,不写会报错
intent.setPackage("com.example.lianxiang.cmakedemo1");
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mBound) {
unbindService(mConnection);
mBound = false;
}
}
}`
这样,在客户端就可以操作,实现与服务端工程的一个交互。
Messenger实现的进程间的交互,只是信息的传递,客户端无法直接调用服务端的方法,所以AIDL就是解决的这个问题。
2)AIDL
http://www.open-open.com/lib/view/open1469493649028.html (上)
https://www.jianshu.com/p/a8e43ad5d7d2 (上面的博客显示有问题,这个是简书的版本。)
按照博主所说的,结果能实现。
2-1)新建aidl文件,注意新建的规则。
2-2)注意aidl及java类的目录的问题,并且保证服务端与客户端都存在aidl与java文件。
2-3)服务端声明service,service里调用aidl自动生成的java类。
2-4)客户端绑定服务端的service,调用aidl转化的类。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:AIDL深入学习-创新互联
本文URL:http://azwzsj.com/article/dipdhe.html