我想从悬停在用户当前正在查看的内容上的服务启动一个对话框。对话框像这样启动:服务获取触发器以打开对话框 > 启动透明 Activity > 透明 Activity 显示对话框。
我的问题是当用户打开应用程序,进入主菜单,然后按 HOME 离开时。通过按 HOME,它会暂停主菜单 Activity ,而不是将其销毁,并且当服务启动对话框时,主菜单会显示在透明 Activity 下方;导致对话框失去悬停在用户正在查看的任何内容上的影响。
如何才能使透明 Activity 独立于应用程序中的任何其他 Activity 打开?目前防止这种情况的唯一方法是在暂停时完成所有 Activity ;但这是不切实际的。
最佳答案
This是我们最不想要的。 :-)
<强>1。来自服务的对话框
移动设备(恕我直言,尤其是 Android)的最佳体验之一是,几十年后,我们摆脱了系统范围内的烦人警报对话框。最后,最佳实践 [ 1 , 2 ] 用于用户交互为我们提供了一种方法来避免臭名昭著的传播使用 MessageBox(hwnd, lpText, lpCaption, uType)
,争夺焦点和可怜的用户的注意力。请参阅上面的视频模仿。
从 Service
开始对话感觉很尴尬的原因正是因为它应该是后台任务,没有用户交互。从概念上讲,你不应该这样做。这就是为什么我们首先看到这些技巧(透明 Activity ,多么愚蠢的事情)来欺骗设计指南的原因。它们很糟糕,它们扰乱了用户体验,它们窃取了焦点和注意力。他们扰乱了我们的工作。
<强>2。改用通知
每当您想从后台通知用户某事时,当用户在其他地方时,您可以使用通知。这是默认模式,不会打扰用户。
因此,你应该是sending notifications from your Service
.
从那里,如果用户感兴趣,然后他将触摸通知,然后您开始自己的 Activity ,可能会恢复您的 Activity ,创建一个新 Activity ,然后使用对话框请求操作执行,或任何您想做的事情。
<强>3。最后,不要使用FLAG_ACTIVITY_MULTIPLE_TASK
You should not ,永远,除非您仔细阅读并完全理解 documentation,否则请使用此标志,以及使用该标志的含义。
Do not use this flag unless you are implementing your own top-level application launcher. (...) Because the default system does not include graphical task management, you should not use this flag unless you provide some way for a user to return back to the tasks you have launched.
真的。在这种情况下,不要这样做。
关于android - 从服务启动对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8350385/