Android官方文档之Activity和Task(6)
要进行这种行为的特定的数据。上面的例子中,联系人列表,特定联系人,电话号码,图列表,特定的图都是数据。
任何一个在主屏上启动Activity的Intent都是明确的Intent。 灵位,一些Activity进入自己Application内部的Activity使用的也是明确Intent。
Intent的详情,参见Intent class和 intent filters.
在Task间切换
下面一系列图展示了用户如何在两个Task间转换。 在这个例子中,用户写了一个文本消息,然后附上一张照片。在做这些事儿的时候,用户看了一眼日历。 然后,用户回来,继续附照片和发送消息。
开始第一个Task。 为了发送一个附加了图片的消息,你需要如下操作:
主屏 > Messaging > NewMessage > MENU > Attach > Pictures 最后一步操作启动了Gallery来取照片。 注意到,Gallery是在另外一个Application中。
在用户取图之前,用户决定去看一眼日历,这就是另一个Task了。 但是当前界面没有一个直达Calendar的按钮,所以用户必须回到主屏去。
开始第二个Task。 用户按HOME键 > 点Calendar来看日历。 Calendar作为一个新的Task被启动。ApplicationLauncher启动的Application都是新的Task。
切换到第一个Task,并完成它。 看完了日历,用户于是按HOME键 > Messging,返回去继续附加图片。 这个操作并没有使用户进入Messaging,而是进入了刚刚离开的Gallery(即使这两个并不是一个Application!)。 然后用户选择一个图片,加入到消息里去,发送消息,完成第一个Task。
设计建议
以下是对应用设计者和开发者的建议和指示。
当你写的Activity不希望被重用的时候,不要写IntentFilter。使用准确的Intent来调用它。
当你不想你的Activity被其它Application重用的时候,要确定这个Activity上没有定义任何的IntentFilter。 只能从应用管理器进入,或者只能从同一个Application进入的Activity,应该应用这种做法。 对于这类Activity,使用目标明确的Intent来进入。(而不是通过Intent向系统查询能力这种做法)。 这种情况,也没必要使用IntentFilter。 IntentFilter是发布给所有其它Application的。 所以,如果你用了IntentFilter,你实际上就是在给你的Activity加入了一个外部入口,有可能会造成无意识的安全漏洞。
当你重用其它应用的Activity时,不要忘记处理没有Activity满足要求的情况。
你的Application可以重用其它的Activity,如果这些Activity可以重用的话。 重用的时候,你不能假设你的Intent一定能匹配到一个外部Activity。你必须考虑没有合适Activity的情况。
你可以在真正启动Activity之前测试一下是否有匹配的,也可以直接启动Activity然后处理异常。 两种解决方案见博文Can I use this Intent?。
通过查询PackageManager可以知道一个Intent能否被匹配到一个Activity。 博文提供了一个例子,在isIntentAvailable()方法中。 然后,如果无法匹配,你可以停止构造Intent对象,或者再提示给用户一个地址,例如Market,让他去下载需要的应用。 如此,你的代码在调用startActivity()或者startActivityForResult()的时候,可以保证Intent对象都是经过测试的并可以匹配到合适Activity的。
考虑你的Activity如何才能被其它Application重用。
一个设计者,或者开发者,应该清楚用户可以如何启动你的Application,以及使用Application内的Activity。 用户可以通过主屏,或者其他Application来使用你应用里的Activity。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>