![](/img/trans.png)
[英]App restarts main activity from background instead of resuming previous state
[英]resuming my application from background
我创建了一个应用程序,它的音乐播放器只有一个简单的布局,一个按钮用于播放和停止。 当我按下播放按钮时,音乐开始播放,而播放按钮变为停止按钮..然后,当我按下后退按钮时,应用程序进入后台,因此我必须进入菜单并从那里启动应用程序是如果我这样做,则android启动我的应用程序的新实例,并且停止按钮又回到播放按钮..我不想要..我只想让android恢复我的应用程序并将其恢复到前台并保持状态我所有的按钮中
当用户使用“后退”按钮退出您的应用程序时,您的应用程序将停止并且不保存任何状态。 您需要使用诸如Activity.onStop之类的生命周期方法之一来保存恢复应用程序所需的任何状态。 还有就是活动周期的一个很好的描述在这里 。
还有另一部分称为“ 保存持久状态” ,它详细介绍了如何使用“ 共享首选项” 。
[编辑]
我在这里对您的代码的外观进行一些假设,但希望您至少可以使这些想法适应您所拥有的内容。 仅在活动中添加一些内容就可以解决问题。
您将希望能够在应用关闭时保存相关设置:
@Override
public void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
icicle.putString("path", mMediaPath);
icicle.putInt("time", mMediaPlayer.getCurrentPosition());
icicle.putBoolean("isPlaying", mMediaPlayer.isPlaying());
}
您需要设置一种方法,以根据这些设置初始化媒体播放器。 像这样:
private void initialize(String path, int time, boolean isPlaying) {
mMediaPlayer.setDataSource(path);
mMediaPlayer.seekTo(time);
if (isPlaying) mMediaPlayer.start();
findViewById(R.id.my_play_button).setBackgroundResource(isPlaying? R.drawable.pause_button: R.drawable.play_button);
}
然后,您可以在重新创建活动时调用它:
@Override
public void onRestoreInstanceState(Bundle icicle) {
super.onRestoreInstanceState(icicle);
String path = icicle.getString("path", DEFAULT_TRACK);
int time = icicle.getInt("time", 0);
boolean isPlaying = icicle.getBoolean("isPlaying", false);
this.initialize(path, time, isPlaying);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.