【问题标题】:SingleInstance and Home button navigation单实例和主页按钮导航
【发布时间】:2014-05-05 12:15:03
【问题描述】:

我的导航有问题。

我有 A、B 和 C 三个活动。

我正在制作一个播放音乐的应用程序。所以我需要一个在后台运行的持久活动,它包含媒体播放器的控制。

所以,我希望活动 C 始终运行。 所以我像这样配置了活动C

<activity
   android:launchMode="singleInstance"
   android:name="ch.etml.podcast.PlayerActivity" >
</activity>

我的问题是当我按此顺序导航时B -&gt; C -&gt; HOME PRESS -&gt; Click on application icon 会启动活动B 而不是活动C

在阅读了几个问题后,我了解到使用 lauchmod singleInstance 时这似乎是一种正常行为。 我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: android android-intent navigation android-manifest single-instance


    【解决方案1】:

    你应该阅读这个http://developer.android.com/guide/components/tasks-and-back-stack.html

    singleInstance 不是一个好的选择。您的活动 C 在单独的任务中运行。当您尝试启动应用程序时,按 HOME 后,您的主要活动的任务被恢复,其中不包括 C。

    我会给你建议做什么,但我真的不明白你想为你的音乐播放器实现什么。能详细解释一下吗?

    更新

    如果您正在开发在后台运行媒体播放器的应用程序,请查看 SDK 示例中的示例应用程序,例如[sdk 文件夹]/samples/android-19/legacy/RandomMediaPlayer

    这是您自己的应用程序的绝佳基础代码。

    【讨论】:

    • 活动 C 是读取活动 B 中已单击的所有媒体的活动。当我单击活动 B 中的歌曲时,我希望将活动 C 置于前面跨度>
    • 好的,但是为什么一定要singleInstance。你能给我一个你试图用这个属性解决的例子吗?如果您未设置此属性,则当您从初始状态启动应用程序时,将不会显示活动 C,如果 C 可见并且您按 HOME,它将被带到前面。我错过了什么?
    • 即使应用程序在后台,也需要播放音乐。当我在活动 B 中单击一首歌曲时,我想重用与活动 C 中的服务的连接来更改歌曲,我不想重新创建整个活动
    • 我希望活动 C 成为您的音乐服务的瘦客户端。如果每次创建 C 时都会进行一些繁重的加载,那么您应该考虑重构。创建 C 后,您应该只建立与音乐服务的连接并显示正在播放的内容。这样,您可以随时从 B 到 C 并返回。当 B 启动 C 时,您只需传递歌曲标识符,在 C 创建时,与服务建立连接后,更改播放歌曲。如果它不适合您,请发布您的一些代码。我创建了在后台播放媒体的应用程序,它对我来说非常完美。
    • 这听起来像是设计问题,而不是编程问题。没有单一的答案。您的选择受限于您的想象力。一种流行的解决方案是创建由您的音乐服务控制的通知。从该通知中,您可以启动活动 C。您还可以以不同的方式构建 UI。也许相反,活动在选项卡、微调器或导航抽屉中使用片段。在这种情况下,您可能只有一个始终连接到音乐服务的活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    相关资源
    最近更新 更多