Android 在ActivityGroup中,如何恢复上一个活动(无需重新启动)
我有一个ActivityGroup,它在一个选项卡中有4个活动 A1->A2->A3->A4 假设我从任何正在重新启动的活动中按back键。我的要求当我调用一个新的活动时,它应该重新开始。当我按下后退按钮时,必须恢复上一个活动(不重新启动) 请帮我做这个。我缺乏设置适当的意图标志。我的代码是这样的Android 在ActivityGroup中,如何恢复上一个活动(无需重新启动),android,Android,我有一个ActivityGroup,它在一个选项卡中有4个活动 A1->A2->A3->A4 假设我从任何正在重新启动的活动中按back键。我的要求当我调用一个新的活动时,它应该重新开始。当我按下后退按钮时,必须恢复上一个活动(不重新启动) 请帮我做这个。我缺乏设置适当的意图标志。我的代码是这样的 public void startChildActivity(String Id, Intent intent) { Window window; Log
public void startChildActivity(String Id, Intent intent) {
Window window;
Log.e("startChildActivity","startChildActivity");
window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
if (window != null)
{
mIdList.add(Id);
setContentView(window.getDecorView());
}
}
public void finishFromChild(Activity child)
{
restartFlag=true;
Log.e("finishFromChild","finishFromChild");
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size()-1;
if (index < 1) {
finish();
return;
}
manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
setContentView(newWindow.getDecorView());
}
public void startChildActivity(字符串Id、意图){
窗口窗口;
Log.e(“startChildActivity”、“startChildActivity”);
window=getLocalActivityManager().startActivity(Id,intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP));
如果(窗口!=null)
{
添加(Id);
setContentView(window.getDecorView());
}
}
public void finishFromChild(活动子项)
{
restartFlag=true;
Log.e(“finishFromChild”、“finishFromChild”);
LocalActivityManager=getLocalActivityManager();
int index=mIdList.size()-1;
如果(指数<1){
完成();
回来
}
manager.destroyment(mIdList.get(index),true);
删除(索引);
索引--;
字符串lastId=mIdList.get(索引);
Intent lastIntent=manager.getActivity(lastId).getIntent();
Window newWindow=manager.startActivity(lastId、lastIntent.addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP));
setContentView(newWindow.getDecorView());
}
首先,我建议您仔细阅读本文。并尝试了解不同的启动模式和意图标志是如何工作的
现在回答您的问题,如果操作系统决定为您终止活动,您将无能为力。基本上,一旦有另一个活动出现,您的活动就会处于onPause()状态。然后,如果操作系统确定内存不足(除其他外),它将调用move it to ondestory()。任何数量的意图标志都不能为您更改此行为。因此,从您上面描述的情况来看,您的活动似乎是被置于onPause()后被选择销毁的不幸活动之一
所以。。。你能做些什么来解决你的问题?这就是你应该做的:
您应该在活动中实现onSaveInstanceState()
和onRestoreInstanceState()
,以保存和恢复下次在onCreate()中打开活动时所需的所有状态信息
您应该检查传递给您的包
对象,并尝试使用传递给您的savedState信息重建活动
我还建议您非常仔细地阅读本参考文件,首先,我建议您非常仔细地阅读本文。并尝试了解不同的启动模式和意图标志是如何工作的 现在回答您的问题,如果操作系统决定为您终止活动,您将无能为力。基本上,一旦有另一个活动出现,您的活动就会处于onPause()状态。然后,如果操作系统确定内存不足(除其他外),它将调用move it to ondestory()。任何数量的意图标志都不能为您更改此行为。因此,从您上面描述的情况来看,您的活动似乎是被置于onPause()后被选择销毁的不幸活动之一 所以。。。你能做些什么来解决你的问题?这就是你应该做的: 您应该在活动中实现
onSaveInstanceState()
和onRestoreInstanceState()
,以保存和恢复下次在onCreate()中打开活动时所需的所有状态信息
您应该检查传递给您的包
对象,并尝试使用传递给您的savedState信息重建活动
我还建议您仔细阅读本参考文件,我终于找到了解决方案。其实罪魁祸首是
manager.destroyActivity(mIdList.get(index), true);
在代码中
Android destroyActivity()函数impl中存在错误
问题的确切根源在LocalActivityManager.java中的以下代码块中:
public Window destroyActivity(String id, boolean finish) {
LocalActivityRecord r = mActivities.get(id);
Window win = null;
if (r != null) {
win = performDestroy(r, finish);
if (finish) {
mActivities.remove(r);
}
}
return win;
}
变量mActivities是包含活动记录的hashmap,它使用传递到startActivity()的id作为键。在该方法中,为键传入的对象是LocalActivityRecord,而不是id字符串。这导致hashmap找不到条目,因此无法删除它
更多信息请参考此链接 嗨,我终于找到了解决办法。其实罪魁祸首是
manager.destroyActivity(mIdList.get(index), true);
在代码中
Android destroyActivity()函数impl中存在错误
问题的确切根源在LocalActivityManager.java中的以下代码块中:
public Window destroyActivity(String id, boolean finish) {
LocalActivityRecord r = mActivities.get(id);
Window win = null;
if (r != null) {
win = performDestroy(r, finish);
if (finish) {
mActivities.remove(r);
}
}
return win;
}
变量mActivities是包含活动记录的hashmap,它使用传递到startActivity()的id作为键。在该方法中,为键传入的对象是LocalActivityRecord,而不是id字符串。这导致hashmap找不到条目,因此无法删除它
更多信息请参考此链接 只需更换线路即可
Window newWindow = manager.startActivity(lastId,lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
与
只需更换线路
Window newWindow = manager.startActivity(lastId,lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
与
是的,它是bug,那么它的解决方案是什么?是的,它是bug,那么它的解决方案是什么?提供一个解决方案是好的;答案中的解释更好,提供解决方案是好的;在答案中解释更好