【问题标题】:android parent activity killed on startActivityandroid父活动在startActivity上被杀死
【发布时间】:2013-12-17 23:40:16
【问题描述】:

我有一个带有列表视图的简单应用程序。当用户点击列表项时,我会开始一个新活动

Intent eventdetails = new Intent(HomeActivity.this,EventDetailsActivity.class);
eventdetails.putExtra("eventId", ev.getId());
eventdetails.putExtra("eventDate", ev.getEnglishDate());
startActivity(eventdetails);

一旦 EventDetailsActivity 启动,HomeActivity 就会被销毁(调用 onDestroy)。当用户从 EventDetailsActivity 中点击返回按钮时,会重新创建 HomeActivity,这是我不想要的。

我无法弄清楚为什么 HomeActivity 一开始就被杀死了。我也使用 udb 检查了活动堆栈,它没有显示 HomeActivity

Running activities (most recent first):
Run #0: ActivityRecord{43938cc8 com.app.event/.EventDetailsActivity}

这仅在三星 Galaxy Note 2 上发生

知道为什么会这样吗?

【问题讨论】:

    标签: android activity-stack


    【解决方案1】:

    当用户启用此设置时会发生这种情况

    转到设置->开发者选项

    在APPS类中(向下滚动查看),查看选项
    不要保留活动(用户离开后立即销毁每个活动)。

    看看这个选项是否被选中

    【讨论】:

    • 感谢 Gopal,这就像一个魅力!这让我发疯了
    • 这是我找了两天的答案!!
    • 谢谢,这是解决我的问题的唯一可行且合乎逻辑的解决方案
    【解决方案2】:
    Intent eventdetails = new Intent(HomeActivity.this,EventDetailsActivity.class);
    eventdetails.putExtra("eventId", ev.getId());
    eventdetails.putExtra("eventDate", ev.getEnglishDate());
    eventdetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    eventdetails.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(eventdetails);
    HomeActivity.this.finish();
    

    试试这个代码 让我知道它是否对你有帮助

    【讨论】:

    • 这会破坏他不想做的HomeActivity
    【解决方案3】:

    也许这对某人有用 - 在我的情况下,问题是父活动是在清单中定义的

    android:noHistory="true"
    

    使用此设置,一旦打开新活动,它就会被杀死。 见How does android:noHistory="true" work?

    【讨论】:

    • 正是我忽略的!
    【解决方案4】:

    这是因为android管理释放activity的过程,如果你想完成之前的activity,那么在startactivity之后添加这个:

    HomeActivity.this.finish();
    

    你可以使用标志清除以前的活动

    eventdetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    eventdetails.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    

    或两者兼有:

    Intent eventdetails = new Intent(HomeActivity.this,EventDetailsActivity.class);
    eventdetails.putExtra("eventId", ev.getId());
    eventdetails.putExtra("eventDate", ev.getEnglishDate());
    eventdetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    eventdetails.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(eventdetails);
    HomeActivity.this.finish();
    

    希望它有助于解决问题。

    【讨论】:

    • 感谢 Hamad 的回复,但 Gopal 的解决方案奏效了。我不想杀死 HomeActivity,它被杀死了……这是我不想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2011-09-09
    相关资源
    最近更新 更多