销毁后恢复活动?(活动生命周期)需要帮助

问题描述 投票:0回答:4

嗨,我有一个几乎完整的应用程序。它是一个音乐播放器。它可以播放来自服务的音乐。

当我按下后退按钮时,启动该服务的活动显然被破坏了。(i want该活动被破坏了,以便用户可以浏览其他活动。我之所以这样说是因为单例等。不会解决我的问题),但我不知道如何从通知中重新创建活动。同样,当启动该服务的活动可见(而不是销毁)时,如果我单击该通知,我的应用程序也会意外停止。因此,这里有两个问题需要解决。

我正在使用一个全局变量,它是一个列表,因此,我认为我不需要在销毁之前保存数据。我想我知道如何恢复和重新创建活动状态的概念,但是我认为我并不完全知道我不确定应该使用哪种方法还原活动状态以及如何还原?我也正在onCreate方法中启动服务,是否应该将其更改为其他方法?可以启动服务吗?恢复活动时在onCreate中出现问题吗?

额外说明:全局变量在整个应用程序中都可用,并且独立于单个活动,因为它们扩展了[[Application。此外,捆绑包仅在系统破坏了活动时才有用。后退按钮,我们明确地破坏了活动,因此无法将数据保存到捆绑包中,因为活动从未调用过onSaveInstanceState。

android android-lifecycle
4个回答
0
投票
如果数据是一致的并且反映在服务中,那么您需要bind to the Service并从IBinder(可以包装Service对象)中获取数据。我个人更喜欢这种方法,因为我根本不喜欢覆盖Application

另一种方法是通过SharedPreferences保存数据。将其活动状态保存在onPause()中,然后在onCreate()中恢复。假设您没有保存数百个项目,那么这是非常低的开销。仅应将其用于反映活动本身状态的数据。


0
投票
您可以根据活动生命周期来播放和停止播放器,例如OnPause-您应致电player.stop()关于简历,您应该致电play和ondestroy,您需要释放播放器实例。

调用服务内部的线程以从服务器获取数据,以便其可以正常运行。

您应该通过调用release或reset来释放mediaplayer实例。

您可以在通知中使用“待定意图”,因此当您看到通知时,可以打开待定意图中提到的任何内容。



-1
投票
活动状态应在onCreate中恢复。 onCreate方法将Bundle作为参数,其中包含数据的键值对。如果此参数为null,则表示没有保存以前的状态。只需检查它是否不为null,并在必要时恢复内容即可:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(...); ... if(savedInstanceState!=null) { // Restore activity state based on saved data! } }

当然,如果要在还原时使用它,则需要保存数据。系统自动调用活动的onSaveInstance状态方法,您可以在其中将数据放入包中。 

@Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putInt("key", value); // Store data }

请注意,这全部适用于系统自动销毁您的应用程序的情况。 (例如,当前台的其他应用程序用尽内存时。)此机制是使您的活动返回到用户最后一次看到它的状态。
© www.soinside.com 2019 - 2024. All rights reserved.