【问题标题】:Android: Confused about application statesAndroid:对应用程序状态感到困惑
【发布时间】:2011-01-07 18:06:54
【问题描述】:

我在这里看到了这篇文章 (http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state)。我相信我也有类似的问题。

我有一个监听音频流的应用程序(使用 mediaPlayer 对象)。如果我按下主页按钮,它将继续流式传输并隐藏我的应用程序。然后,稍后我可以返回我的应用程序并在完成后按停止。这就是我要的。但是,如果我按下后退按钮,当我稍后再次打开我的应用程序时,该应用程序已重新绘制。文本框,按钮,一切都像我第一次打开应用程序一样重置,所以我无法停止我的音频流。单击停止没有任何作用,因为应用程序已经“忘记”它正在流式传输(流在与主 UI 线程不同的处理程序下运行,所以我猜测自从它被“重置”后它已经失去了对其处理程序的跟踪?)。

为什么“后退”按钮会出现这种情况,我该如何阻止它?

【问题讨论】:

    标签: android instance state


    【解决方案1】:

    将流式传输功能移动到 Android 服务中。使用 Activity 绑定到 Service 并与之交互。

    【讨论】:

    • 这仍然给我留下了一个问题,它不必是这样,但我认为这是一个很好的观点:我有一个标有“开始”的按钮。当您单击它时,如果其文本为“开始”,它将启动流运行的处理程序并将按钮文本更改为“停止”。当您单击并且文本为“停止”时,它会停止流并将文本更改回“开始”。
    • 如果我按下按钮并启动流(按钮文本变为“停止”)然后按返回,如上所述,继续我的业务听流然后返回我的应用程序停止流,界面被重绘并且按钮说“开始”所以我不能停止它?单击开始启动另一个流,所以现在有两个运行时间稍有不足,然后按停止只是停止这个新的流实例,旧的流实例仍在运行。如果我使用像这样带有单个按钮的服务,当我返回应用程序时,它仍然会启动“开始”而不是“停止”,对吗?
    • 是的,这是正确的。您必须保存 Activity 的状态。或者,如果您使用服务,请询问该服务是否有正在运行的流。按下 Back 并重新启动 Activity 将导致调用 onCreate。所以使用类似 saveInstanceState.getBoolean("HAS_RUNNING_STREAM")
    • Philipp Schwarte,抱歉回复晚了,我还没有改变来实现这个。使用服务正是我最终需要的,非常感谢! :D
    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多