nob*_*alG 15 android launchmode
这张图片非常有助于理解singleTask从这里获取的洗衣模式提供的功能
但是,在同一个应用程序的情况下,我理解这一点,如果两个任务属于两个不同的应用程序,我会遇到问题
令人困惑的场景(虚构),
当我输入我的电子邮件内容时,我切换到一些聊天应用程序,应用程序崩溃了,并为我提供了通过电子邮件向开发人员报告问题的选项,现在当我选择" 报告 "时,我的电子邮件应用程序(这是将打开相同的默认电子邮件应用程序).
现在,由于电子邮件应用程序的根活动是单一任务,我写的内容是否会对我可见?
最重要的是这次,任务/堆栈属于两个不同的应用程序.
即使您使用的是2个不同的应用程序,它也会以预期的方式工作:
singleTask活动已经存在,则将使用该副本,并onNewIntent()调用该方法从技术上讲,从链接再现定义:
系统创建新任务并在新任务的根目录下实例化活动.但是,如果活动的实例已存在于单独的任务中,则系统会通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例.一次只能存在一个活动实例.
通过将活动作为共享文本和singleTask清单中的目标,可以轻松验证这一点:
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
现在为onCreate()和onNewIntent()方法添加一些日志记录并进行一些场景测试.
我发现在测试各种启动模式时特别有用的是以下ADB命令:
adb dumpsys activity activities这会输出大量文本(在执行此操作之前可能有助于重新启动手机 - adb reboot),显示活动任务堆栈的详细信息.这可用于向您显示您的singleTask活动在通过不同的应用程序启动时"重新连接"自身.
至于关于电子邮件的问题,我认为这将取决于您使用的是哪个电子邮件客户端,但我希望他们onNewIntent()正确处理该方法,并在显示您的新电子邮件之前保存当前的草稿.
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |