Android官方文档之Activity和Task(7)
来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:44 点击:次
从主屏启动你的主Activity- 如果你的应用可以独立运行, 用户可能会从ApplicationLauncher(一般来说被实现成为主屏上的滑动抽屉), 或者主屏上的快捷方式,或是是TaskSwitcher,来启动它。 (这个机制,是对于IntentFilter的动作是MAIN分类是LAUNCHER的Activity。)
在其它应用内部启动你的Activity - 或许你的Activity是能够被重用的那种。 例如,很多Application能够用来和其它用户分享数据。 分享的方式包括电邮,文字信息或者把数据上传到某个公共网址。
当你的一个或多个Activity可以替代别的Application已存在的Activity时,在用户需要这个Activity时你可以让你的Activity也对用户可用。 例如,如果你的Activity也可以发送数据(电邮、文字信息或者上传),要考虑把你的这个Activity作为一个选择提供给用户。 给出一个特定的例子。Gallery让用户可以分享图片。 当用户从菜单选择“分享”时,系统会比较“分享”请求(一个Intent对象)和可用的Activity(通过它们的IntentFilter),然后提供给用户来选。 此时,系统匹配到了Email,Gmail,Messaging和Picassa。 要是你的Activity也能发送图片或者上传图片的话,只需要通过配置IntentFilter让你的Activity可用就可以了。
其它Activity启动你的Activity的时候,可能期望或者没有期望有返回。
期望有返回 - 这种情况是一个闭环,被启动的Activity必须或者返回一个确定值,或者被取消。 在上面那个从Gallery分享图片的例子里,用户完成了发送或上载操作后,返回到了Gallery。 这个就是在Gallery中启动一个外部Activity的例子。 (通过 startActivityForResult()启动的Activity就是这样)。
并不期望有返回 - 这种情况,是开放的。 以在邮件中点击地址为例,MapActivity会被启动来显示地图。 电邮并不需要Map来返回什么。用户可以通过按BACK来返回。 (通过startActivity() 启动的Activity就是这样)。
你的Activity仅仅能从其它Application内部启动。 - 上一个通过Email、Gmail、Messaging或Picass分享图片的例子中, 所有的Activity也都可以通过点击主屏上ApplicationLauncher上的图标来启动。 与之不同的是,用于裁剪图片并附加文件的Activity,不能从主屏启动。它们需要上下文运行环境,不能独立运行。
实际上,连Application都不是所有的都有图标并且可以在主屏启动的。 拿一个不常用的小应用做例子,这个小应用能够替换一个其它Application中有进入点的功能。 例如,Android一般有一个内建的铃声选择器,用户可以从设置应用中的声音设置来进入。 你可以写一个自己的铃声选择器,可以用跟系统的选择器同样的Intent来进入。 如下图所示,当用户选择“电话铃”的时候,会有一个对话框,来让他选择是使用系统的选择器还是你的选择器,用户可以保存他们的选择。 铃声选择器是一个不怎么常用,并且有一个已经明确定义的开始点(其它应用中)。所以,其实没必要在主屏弄一个单独的图标给它。
一个Application有两个或多个主Activity,并且这些主Activity都有图标在主屏上。 - 我们已经定义了,单独apk文件中的所有东西,都属于一个Application。 你可以写一个有多个主Activity的Application。
Camera.apk就是一个应用多个分开的主Activity的很好的例子。它有两个主Activity,Camera和Camcorder, 有不同的图标,并且可以独立进入。 在用户看来,好像是两个不同的应用。 它们共享同一个镜头,而且都把数据(静态图片或者动态图片)存到Gallery里去。
In order for your application to contain two different, independent activities launchable from Home, you must define them to be associated with different tasks. 如果你希望你的应用包括两个能从主屏进入的不同的不相关的Activity,你需要定义它们关联于不同的Task。 (意思就是说,要为每个主Activity设置不同的TaskAffinity。上面这个例子中,是“com.android.camera”和“com.android.videocamera”。)
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>