0

基本上我的应用程序有 2 个活动。说 "A" 和 "B" 。A 启动 B。

Activity B 播放音乐,也有通知。

案例 1:当视图仍在活动 B 上时,我按下主页按钮,然后单击通知,活动 B 以完整的视图打开并播放音乐(因为在清单中我使用的是 android:launchMode= “singleTop”,因此没有创建另一个活动实例)这部分是根据需要......但是

案例2:当视图在活动B上并且我按下返回按钮时,活动A出现然后我点击通知,活动B打开,视图丢失并且音乐也停止(不需要)......我猜测它会发生,因为当我按下后退按钮时,活动被破坏,所以我必须以编程方式恢复它的视图吗?所以要恢复它的视图我覆盖了两种方法.....

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("boolMusicPlaying", boolMusicPlaying);
  savedInstanceState.putInt("swapnumber", swapnumber);
  savedInstanceState.putString("seekbarprogress", progress2);
  savedInstanceState.putInt("position.seekbar",seekbar.getProgress());
  savedInstanceState.putString("seekmaxString", max2);
  savedInstanceState.putInt("seekmaxInt",seekMax);
  savedInstanceState.putParcelableArrayList("songfetails",songdetails);
  super.onSaveInstanceState(savedInstanceState);


}
//make a note ....even if i don't override onDestroy() and don't call on SaveInstanceState explicitly, then too i am not getting any desired effect.......
@Override
public void onDestroy()
{   Bundle savedState = new Bundle();
onSaveInstanceState(savedState);//because of this line....the app is crashing......
super.onDestroy();
    }

但它没有帮助......在创建时我正在检查保存的实例是否为空......相应地创建视图......(即从保存的实例或新鲜的)但它没有t帮助...这条线也在崩溃...onSaveInstanceState(savedState);

即使我不覆盖 ondestroy() 并从任务杀手手动终止应用程序,然后尝试打开活动 B,那么保存的实例也应该正常工作,因为 OnSaveInstanceState 方法将被自动调用,对吧? ?请帮忙

4

2 回答 2

1

来自 Android 文档:

当您的 Activity 因用户按下 Back 或 Activity 自行结束而被销毁时,系统对该 Activity 实例的概念将永远消失,因为该行为表明不再需要该 Activity。但是,如果系统由于系统限制(而不是正常的应用程序行为)而破坏了 Activity,那么尽管实际的 Activity 实例已经消失,但系统会记住它的存在,因此如果用户导航回它,系统会创建一个新的使用一组保存的数据来描述活动被销毁时的状态的活动实例。系统用来恢复之前状态的保存数据称为“实例状态”,是存储在 Bundle 对象中的键值对的集合。

要解决第二个问题,您必须从其他来源恢复数据(播放音乐的服务,从应用程序上下文或单例恢复信息等)

有关更多信息,请查看

于 2013-11-14T20:11:01.247 回答
1

基本上如果你按下了后退按钮,应该使用恢复活动shared preferences/or a database,但是如果你没有按下后退按钮然后你想恢复活动的状态(因为活动被系统破坏了)那么bundle savedinstances可以使用 ...

于 2013-12-26T08:53:55.713 回答