您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

重新启动活动时调用onStop延迟

重新启动活动时调用onStop延迟

在《Android开发人员指南的活动生命周期》中

当一项活动开始另一项活动时,它们都会经历生命周期过渡。第一个活动停止运行,并进入“已暂停”或“已停止”状态,而另一个活动被创建。如果这些活动共享保存到磁盘或其他位置的数据,则必须了解在创建第二个活动之前,第一个活动并未完全停止。相反,启动第二个进程的过程与停止第一个进程的过程重叠。

生命周期回调的顺序定义明确,尤其是当两个活动处于同一进程(应用程序)中并且一个活动正在启动另一个活动时。这是活动A启动活动B时发生的操作顺序:

这种可预测的生命周期回调序列使您可以管理信息从一个活动到另一个活动的过渡。

因此,您描述的行为是预期的或可预测的。

回到您的问题。

1.重启活动时如何彻底销毁PrevIoUsActivity?

2.使用recreate()时是否有方法放置putExtras?

public void recreate ()

使该活动用新实例重新创建。由于配置更改,这导致与创建Activity时基本上相同的流程- 当前实例将通过其生命周期进入onDestroy(),然后在其之后创建一个新实例。

因为将重新创建活动,所以也会调用onSaveInstanceStateonRestoreInstanceState。正如您可以猜到的想法是保存在数据onSaveInstanceState和检索onRestoreInstanceStateonCreate

步骤1:将资料储存在 onSaveInstanceState

// The key for saving and retrieving isActivityRecreated field.
private static final String KEY_IS_ACTIVITY_RECREATED = "KEY_IS_ACTIVITY_RECREATED";

/** true if this activity is recreated. */
private boolean isActivityRecreated = false;

// Call this method when you want to recreate this activity.
private void recreateActivity() {
    isActivityRecreated = true;
    recreate();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean(KEY_IS_ACTIVITY_RECREATED, isActivityRecreated);
    outState.putInt(Constants.VIDEO_ID, videoId);
    outState.putInt(Constants.CATEGORY_ID, categoryId);
}

第2步:检索onRestoreInstanceState或中的数据onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null) {
        isActivityRecreated = savedInstanceState.getBoolean(KEY_IS_ACTIVITY_RECREATED);
        if (isActivityRecreated) {
            // This activity has been recreated.
            // Reset the flag
            isActivityRecreated = false;

            // Write your code when this activity recreated.
            int videoId = savedInstanceState.getInt(Constants.VIDEO_ID);
            int categoryId = savedInstanceState.getInt(Constants.CATEGORY_ID);
            ...   
        }
    }
}
其他 2022/1/1 18:37:12 有450人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶