嗨,我有一个几乎完整的应用程序。它是一个音乐播放器。它可以播放来自服务的音乐。
当我按下后退按钮时,启动该服务的活动显然被破坏了。(i want该活动被破坏了,以便用户可以浏览其他活动。我之所以这样说是因为单例等。不会解决我的问题),但我不知道如何从通知中重新创建活动。同样,当启动该服务的活动可见(而不是销毁)时,如果我单击该通知,我的应用程序也会意外停止。因此,这里有两个问题需要解决。
我正在使用一个全局变量,它是一个列表,因此,我认为我不需要在销毁之前保存数据。我想我知道如何恢复和重新创建活动状态的概念,但是我认为我并不完全知道我不确定应该使用哪种方法还原活动状态以及如何还原?我也正在onCreate方法中启动服务,是否应该将其更改为其他方法?可以启动服务吗?恢复活动时在onCreate中出现问题吗?
额外说明:全局变量在整个应用程序中都可用,并且独立于单个活动,因为它们扩展了[[Application。此外,捆绑包仅在系统破坏了活动时才有用。后退按钮,我们明确地破坏了活动,因此无法将数据保存到捆绑包中,因为活动从未调用过onSaveInstanceState。
Application
。另一种方法是通过SharedPreferences保存数据。将其活动状态保存在onPause()
中,然后在onCreate()
中恢复。假设您没有保存数百个项目,那么这是非常低的开销。仅应将其用于反映活动本身状态的数据。
调用服务内部的线程以从服务器获取数据,以便其可以正常运行。
您应该通过调用release或reset来释放mediaplayer实例。
您可以在通知中使用“待定意图”,因此当您看到通知时,可以打开待定意图中提到的任何内容。
@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 }
请注意,这全部适用于系统自动销毁您的应用程序的情况。 (例如,当前台的其他应用程序用尽内存时。)此机制是使您的活动返回到用户最后一次看到它的状态。