栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间:发布时间: 百科书网 趣学号

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

协调活动

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

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

  1. onPause()
    执行活动A的方法。
  2. 活动B的
    onCreate()
    onStart()
    onResume()

    方法按顺序执行。(活动B现在具有用户焦点。)
  3. 然后,如果活动A在屏幕上不再可见,则
    onStop()
    执行其方法。

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

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

回到您的问题。

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

  • 使用重新创建 API 的局限性在于它仅适用于API 11或更高版本

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

  • 从重新创建文档

重新创建

public void recreate ()

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

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

onSaveInstanceState
和检索
onRestoreInstanceState
onCreate

步骤1:将资料储存在

onSaveInstanceState

// The key for saving and retrieving isActivityRecreated field.private static final String KEY_IS_ACTIVITY_RECREATED = "KEY_IS_ACTIVITY_RECREATED";private boolean isActivityRecreated = false;// Call this method when you want to recreate this activity.private void recreateActivity() {    isActivityRecreated = true;    recreate();}@Overrideprotected 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

@Overrideprotected 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 pre when this activity recreated. int videoId = savedInstanceState.getInt(Constants.VIDEO_ID); int categoryId = savedInstanceState.getInt(Constants.CATEGORY_ID); ...}    }}


转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/419611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号