Android中进程之间通信的机制--Activity
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了。