原文地址:http://developer.android.com/guide/components/tasks-and-back-stack.html
一个应用通常有多个activity,每个activity被赋予一个详细的action描述方便用户去start.
例如我们想去呼叫一个电话的时候可以这样编写代码:
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:1320010001");
startActivity(intent);
这是因为android系统在拨号的activity中声明了拨号的action,所以我们可以不知道这个activity的类名就可以调用,这种调用方法是隐式调用。
我们自己开发的应用也可以去开启其他应用中存在的acitivity,例如当我们想发送一个邮件消息时,我们可以new一个intent然后去set一个send的action,
Intent data=new Intent();
intent.setAction(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:way.ping.li@gmail.com"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
执行这个之后如果有多个应用声明了支持这种,系统会弹出对话框让你选择,例如当我们想带开一个网页链接时,通常会让我们选择多个浏览器。
继续上面的,当邮件发送成功后,会继续你的activity,如果发送邮件的activity和你的activity不属于同一个应用,android会把它们放在同一个task中以维持它们之间的亲密性。
从上而知,一个task收集了一系列的activity,这些activity是为了完成同一项工作,例如上面的发送邮件。这些activity按先后打开的顺序被排列在同一个stack当中。
当我们打开桌面上的一个快捷方式的时候,如果当前应用是第一次打开,系统为new一个新的task,并且打开被声明
<action android:name="android.intent.action.MAIN" />的应用放在task栈的栈顶。如果当前应用在后台运行,它会回到前台。