【问题标题】:Creating Activity from a service从服务创建活动
【发布时间】:2013-02-24 07:02:03
【问题描述】:

我有活动 A、B、C、D 和服务 S。 活动的层次结构是 A->B->C->D

当服务收到信号时,服务会添加一个通知,当用户单击它时,我想创建一个新活动 E. 如果存在现有任务,请将活动创建为最底层活动的子项。 (即 A->B->C->E 或 A->E 或 A->B->E 或 A->B->C->D->E) 在这种情况下,A、B、C、D 必须与之前的状态相同,并且 E 是一个新的活动。 如果没有现有任务(没有正在运行的任务),则在另一个新活动 A 下创建该活动。 (即 A->E) 在这种情况下,A、E 都是新的活动。

有什么建议吗?

谢谢!

【问题讨论】:

  • 没有 A-E 的流程很难说。你能解释一下你到底想做什么吗?可能有更好的方法来做到这一点。
  • 嗯..我只是在开发一个简单的聊天应用程序,我想做的是,如果该应用程序没有运行,我想打开一个以主要活动作为其父活动的聊天活动(意味着按下返回到主要活动)。如果应用程序正在运行,我想打开一个聊天活动作为正在运行的任务的顶级活动(保持现有活动的所有状态)。假设 A 是主要活动,B 是设置活动,C 是用户设置活动,D 是用户名更改活动。

标签: android android-intent service android-activity android-pendingintent


【解决方案1】:

根据我的理解,如果你有

A -> B -> C -> D -> E

那么这意味着当你从 E 返回时,你最终会进入 D,然后是 C 等等。否则你对你假设的陈述是错误的

基本上你可以做的而不是做 A-E 只是直接到 E 并通过将这些数据打包到通知的数据中来传递将导致相应对话的数据。

如果您可以直接转到 E,则无需转到 A-E,如果用户使用后退按钮返回,您应该拦截它并处理流程以尊重您的设计。这样做应该始终从 E-A 逐步进行。否则,您以糟糕的方式实现了应用程序的流程。

还有你对 A-D 如何糟糕的设计的设置。您应该更改此设置以反映我所描述的内容。

一个例子

Main screen (A)

List Screen (B)

Message Screen (C)

Details Screen (D)

这是有道理的,并且是更好的流程。直接前往 D,然后使用 Back 按钮从 D 向后遍历到 A。

注意

任何设置屏幕不应该在流程中,因为这会让用户感到困惑,因为他们没有遍历它,所以它是一个 无上下文 屏幕来显示。而且您的服务也不应该是流程的一部分,它的状态应该由活动根据需要维护。

【讨论】:

  • 直接进入 E 并通过将这些数据打包到您的通知数据中来传递将导致相应对话的数据。您是指使用 taskstackbuilder 创建pendingintent 吗?
  • taskstackbuilder...?我不知道这是什么……但是您的通知应该直接链接到某个消息。并在我的示例 D 屏幕中引导到该特定屏幕。
  • 在我的代码中,当用户点击通知时,将发送pendingintent。并且该pendingintent 不会再次构建活动层次结构。如果我通过单击通知启动活动 D,它将向我显示 D 活动并返回将移动到主屏幕。
  • 这意味着您不会拦截后退按钮以尊重您的流程。解决这个问题,按照当前标准,这是一个糟糕的设计,您应该考虑对应用程序的活动及其流程进行更多控制。
  • 我得到了我的计划,它通过发送带有通知的广播 PendingIntent 来工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多