Android中进程之间通信的机制--Activity
2012-06-30 19:45
274 查看
Activity是android系统的三大组件之一,他可以跨进程去调用别的进程中的activity。
1.前提:
被调用的activity必须是共享的。在电话拨号器的例子中,
ntent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678"));
startActivity(callIntent);
执行完这些代码后,该应用程序就会去调用系统的拨号功能,实现拨号。其实系统的拨号功能也是有一个activity实现的,系统把这个activity共享了,给他注册了一个id号叫做:android.intent.action.CALL
2.怎么实现activity的共享
就是给activity注册一个唯一标识符action。在功能配置文件中的意图过滤器中配置他,他的元素名称叫做action,我们可以称之为动作,他的作用是告诉android做什么,就是要去调用那个activity实现功能。
3.如何调用别的进程中的activity
这里就要用到意图了,intent是一种运行时绑定机制,他有效地降低了android中组件的耦合性。意图通过意图,程序可以向android系统表达某种意愿或诉求,让系统执行某些动作,他还可以激活新的activity或者让activity执行新的动作。intent的构造函数有一个是这样的Intent(String action, Uri uri),第一个参数是共享的activity的唯一标识符。第二个参数是uri。它包括协议和数据。activity的Intent-filter是相 对应的,action能够匹配出由那个activity来执行动作,uri来告诉这个activity具体干什么。因为一个activity可以配置多个 Intent-filter,例如记事本程序的NoteEditor activity有两个filter -- 一个启动并显示一个特定的记录给用户查看或编辑, 另一个启动一个空的记录给用户编辑.
4.如何传递数据
所有的数据都是通过intent来传递的,但是我们可以根据实现方式的不同来划分为两种方式,第一种直接在uri中绑定数据,通常为协议头+数据,例如Uri.parse("tel:12345678")); 另一种方式是通过intent的put**方法来绑定数据或者intent直接绑定bundler对象。
5.当调用一个新的activity之后,如何获得这个activity的返回值
使用startActivityForResult方法来启动其他应用程序的Activity,以便获得Activity的返回值
然后在InvokeActivity中使用下面的代码来调用Main。
intent = new Intent("net.blogjava.mobile.MYACTION", Uri.parse("info://调用其他应用程序的Activity"));
intent.putExtra("value", "调用成功");
startActivityForResult(intent, 1); // 1为请求码
获得返回值:必须要实现onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Toast.makeText(this, "返回值:" + data.getExtras().getString("result"),
Toast.LENGTH_LONG).show();
}
总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个 Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从调用的Activity中返回数据,就需要使用 startActivityForResult方法来启动Activity了。
1.前提:
被调用的activity必须是共享的。在电话拨号器的例子中,
ntent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678"));
startActivity(callIntent);
执行完这些代码后,该应用程序就会去调用系统的拨号功能,实现拨号。其实系统的拨号功能也是有一个activity实现的,系统把这个activity共享了,给他注册了一个id号叫做:android.intent.action.CALL
2.怎么实现activity的共享
就是给activity注册一个唯一标识符action。在功能配置文件中的意图过滤器中配置他,他的元素名称叫做action,我们可以称之为动作,他的作用是告诉android做什么,就是要去调用那个activity实现功能。
3.如何调用别的进程中的activity
这里就要用到意图了,intent是一种运行时绑定机制,他有效地降低了android中组件的耦合性。意图通过意图,程序可以向android系统表达某种意愿或诉求,让系统执行某些动作,他还可以激活新的activity或者让activity执行新的动作。intent的构造函数有一个是这样的Intent(String action, Uri uri),第一个参数是共享的activity的唯一标识符。第二个参数是uri。它包括协议和数据。activity的Intent-filter是相 对应的,action能够匹配出由那个activity来执行动作,uri来告诉这个activity具体干什么。因为一个activity可以配置多个 Intent-filter,例如记事本程序的NoteEditor activity有两个filter -- 一个启动并显示一个特定的记录给用户查看或编辑, 另一个启动一个空的记录给用户编辑.
4.如何传递数据
所有的数据都是通过intent来传递的,但是我们可以根据实现方式的不同来划分为两种方式,第一种直接在uri中绑定数据,通常为协议头+数据,例如Uri.parse("tel:12345678")); 另一种方式是通过intent的put**方法来绑定数据或者intent直接绑定bundler对象。
5.当调用一个新的activity之后,如何获得这个activity的返回值
使用startActivityForResult方法来启动其他应用程序的Activity,以便获得Activity的返回值
然后在InvokeActivity中使用下面的代码来调用Main。
intent = new Intent("net.blogjava.mobile.MYACTION", Uri.parse("info://调用其他应用程序的Activity"));
intent.putExtra("value", "调用成功");
startActivityForResult(intent, 1); // 1为请求码
获得返回值:必须要实现onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Toast.makeText(this, "返回值:" + data.getExtras().getString("result"),
Toast.LENGTH_LONG).show();
}
总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个 Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从调用的Activity中返回数据,就需要使用 startActivityForResult方法来启动Activity了。
相关文章推荐
- android通信机制4:Activity与Activity之间的转跳
- Android AIDL进程通信机制详解
- android开发中fragment的引用以及fragment与activity之间通信的概述
- AIDL/IPC Android AIDL/IPC 进程通信机制——超详细讲解及用法案例剖析(播放器)
- android 的Activity和Service之间的通信
- Android Service与Activity之间通信的几种方式
- Android系统分析之AIDL跨进程通信机制的使用和原理分析
- android 的Activity和Service之间的通信
- Android Service与Activity之间通信
- Aidl跨进程通信机制-android学习之旅(87)
- Android Service与Activity之间通信的几种方式(1)---通过broadcast(广播)的形式
- Android中Activity、Service和线程之间的通信
- Android Service与Activity之间通信的几种方式
- Activity与Service通信(不同进程之间)
- 从AIDL开始谈Android进程间Binder通信机制
- android中的service与Activity之间的通信
- 从AIDL开始谈Android进程间Binder通信机制
- Android——Fragment和Activity之间的通信+Frangment生命周期
- android中fragment和activity之间相互通信
- Android Service与Activity之间通信的几种方式