首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何同时使用onSaveInstanceState(捆绑包outState)和onSaveInstanceState(捆绑包savedInstanceState)?

在Android开发中,我们可以使用onSaveInstanceState()方法来保存Activity的状态数据,以便在Activity被销毁后重新创建时恢复数据。onSaveInstanceState()方法会在Activity即将被销毁之前被调用,我们可以在该方法中将需要保存的数据存储到一个Bundle对象中。

同时使用onSaveInstanceState(Bundle outState)和onSaveInstanceState(Bundle savedInstanceState)的情况是在Activity被系统销毁并重新创建时。这种情况可能发生在设备配置发生变化时,例如屏幕旋转、语言切换等。当Activity被销毁并重新创建时,系统会调用onSaveInstanceState(Bundle outState)方法来保存数据,并在重新创建后调用onCreate(Bundle savedInstanceState)方法来恢复数据。

在使用这两个方法时,我们需要注意以下几点:

  1. onSaveInstanceState(Bundle outState)方法:在Activity即将被销毁之前调用,用于保存需要恢复的数据。我们可以将需要保存的数据存储到outState参数所代表的Bundle对象中,例如使用putString()、putInt()等方法存储数据。
  2. onCreate(Bundle savedInstanceState)方法:在Activity重新创建时调用,用于恢复之前保存的数据。系统会将之前保存的数据传递给savedInstanceState参数,我们可以从该参数中获取之前保存的数据,并进行恢复操作。

同时使用这两个方法的步骤如下:

  1. 在onSaveInstanceState(Bundle outState)方法中,将需要保存的数据存储到outState参数所代表的Bundle对象中。
代码语言:txt
复制
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("key", "value");
}
  1. 在onCreate(Bundle savedInstanceState)方法中,判断savedInstanceState参数是否为空,如果不为空,则说明之前有保存的数据,我们可以从该参数中获取数据并进行恢复操作。
代码语言:txt
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null) {
        String value = savedInstanceState.getString("key");
        // 进行数据恢复操作
    }
}

需要注意的是,onSaveInstanceState()方法只适用于保存少量的简单数据,例如一些基本类型的变量值。对于复杂的数据结构或大量数据的保存,推荐使用其他持久化方式,例如SharedPreferences、数据库等。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云存储服务COS:https://cloud.tencent.com/product/cos
  • 腾讯云数据库TencentDB:https://cloud.tencent.com/product/cdb
  • 腾讯云云服务器CVM:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能AI:https://cloud.tencent.com/product/ai
  • 腾讯云物联网IoT Hub:https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发移动推送:https://cloud.tencent.com/product/umeng
  • 腾讯云区块链服务BCS:https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/tgus
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 中意料之外的应用崩溃以及它们的解决方案

不管应用程序的业务逻辑如何,都可能会因为运行的系统或平台问题而导致出现某些奇怪的崩溃现象。...当应用程序进程被终止的时候,所有的单例对象临时数据都同时丢失了,而现在如果你返回你的应用程序,系统会创建一个新的进程,而你的应用程序会从你退出时候的 Activity 栈顶执行 Resume 函数恢复该...解决方案 2: 现在,你肯定已经注意到可以利用“”对象保存访问数据。与前面的示例中的操作类似,将每个 Activity / Fragment 中所有必要的信息保存下来。...(outState: Bundle) { super.onSaveInstanceState(outState) outState.putParcelableArrayList...我们会让应用程序检查 onViewCreated() 函数中捆绑中的数据是否可用,如果不可用,则会通过访问 ViewModel 的方法获取数据。

1.1K10

【Android 插件化】“ 插桩式 “ 插件化框架 ( 代理 Activity 组件开发 )

, 并使用 AssetManager 加载插件资源的模块 ; 本博客中开发开发本地的 Activity 桩 , 即空壳 Activity , 用于持有插件界面组件 , 并在生命周期中回调插件界面 Activity...插件 apk 中的 ProxyActivity , 则不能使用应用本身的类加载器 , 插件管理器 PluginManager 中的类加载器已经加载了插件 apk 中的 dex 文件 , 因此可以获取到...null, context.getClassLoader() // DexClassLoader 加载器的父类加载器 ); 在支持 插件化的工程中 , " 宿主 " 模块 ...Activity 类对象 ; // 使用类加载器加载插件中的界面组件 Class<?...(Bundle outState) { super.onSaveInstanceState(outState); pluginActivity.onSaveInstanceState

60920

Android 应用保存状态

最先找到的文档就是通过 Activity 的 onSaveInstanceState onRestoreInstanceState 方法来保存用户状态, 虽然最终测试发现这种方法不是肯靠谱, 还是记录下来了...实例参数, 通过重写这个方法, 可以保存 Activity 的状态, 示例代码如下: protected override void OnSaveInstanceState(Bundle outState...) { base.OnSaveInstanceState(outState); outState.PutInt("main_activity_click_count", _count);...} 经过测试, 这种方法最大的缺点就是不靠谱 , 因为 onSaveInstanceState onResotreInstanceState 不是每次都能被系统调用, 因为应用可能在调用 onRestoreInstanceState...2、 使用 SharedPreference 保存状态 Android 推荐在 onPause 方法中使用 SharedPreference 保存状态是比较可靠的, 因为 SharedPreference

88520

Android-Jetpack笔记-ViewModelSavedState

上篇文章提到,虽然viewModel要比onSaveInstanceState简单,但是viewModel只能在屏幕旋转语言切换后(即配置变更时)的页面重建维持数据,当页面意外销毁时数据无法恢复(viewModel...也会重建),而这点onSaveInstanceState可以做到。...(Bundle outState) { super.onSaveInstanceState(outState); //在页面被意外销毁时,存储act的创建时间...outState.putString("test", mTime); } } 在onCreate方法中,新加了savedInstanceState的取值操作,同时重写了onSaveInstanceState...方法存储时间,那么如何模拟页面被意外销毁呢,可以在开发者选项中选中不保留活动-用户离开后即销毁每个活动,开启后,运行app,然后按home键引起页面意外销毁,然后回到页面,查看日志: ?

67520

字节Android工程师都在学习的Activity与Activity调用栈,你都学习了?

首先,Activity就会被销毁,onPause(), onStop(),onDestory()均会被调用,同时由于Activity是在异常状态下终止的,系统会在onStop()之前,调用onSaveInstanceState...} } @Override protected void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState...("extre_test"); Log.d(TAG, test); } 执行顺序: 1 onPause() 2 onSaveInstanceState(Bundle outState) 3 onStop...Activity优先级如下: 1 前台Activity 2 可见但非前台Activity 3 后台Activity 当系统资源不足的时候,会按照这个优先级使用onSaveInstanceState()...只有一个Intent同时匹配这三个类别才能启动目标Activity。 action的匹配要求,Intent中的action存在且必须过滤规则中的其中一个action相同。

38830

Android-活动的生命周期(二)

修改主活动的布局代码,加入两个按钮,分别用于启动NormalActivityDialogActivity。 然后重写Activity的7个回调方法,分别打印相应的语句。...onSaveInstanceState()携带了一个Bundle类型参数,提供了一系列的方法保存数据,比如可以使用putString()方法保存字符串,使用putInt()方法保存整型数据,每个保存方法需要传入两个参数...(Bundle outState){ super.onSaveInstanceState(outState); String tempData = "Something you just...typed"; outState.putString("data_key",tempData); } 数据保存了,一直使用的onCreate()方法也有个Bundle类型参数,这个参数一般情况下都是...的onCreate()方法, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState

35920

Android-Fragment

我们在创建Fragment的管理器的时候,会选择导入那个包下的FragmentManager.有app包下v4下的,这里我推荐用v4的FragmentManager。...但如果我们的Activity被回收,那么就会出现我点击的是A下标,结果出来的是BFragment,还会出现重叠等问题,那么如何解决呢?...So,在刚才避免Fragment重复创建的基础上,我们要记录上一次当前点击的Fragment下标,并在onSaveInstanceState()方法中保存。...保存上一次当前Fragement下标 其实解决Fragment还有一个简单方法,那就是注释掉onSaveInstance()中的super.onSaveInstance(outState),不推荐使用...onSaveInstanceState(Bundle outState)会在以下情况被调用: 当用户按下HOME键时。 从最近应用中选择运行其他的程序时。 按下电源按键(关闭屏幕显示)时。

1.1K30

Fragment 重叠 遮盖问题 完美解决

原本以为只有在系统因为内存回收Activity时才会调用的onSaveInstanceState(),居然在转跳到其他Activity、打开多任务窗口、使用Home回到主屏幕这些操作中也被调用,然而onRestoreInstanceState...接着通过调查资料发现Activity中的onSaveInstanceState()里面有一句super.onRestoreInstanceState(savedInstanceState),Google...其实到这里大家也就明白了,就是因为这句话导致了重影的出现,于是我删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中的创建Fragment方法,然后再通过保存切换的状态...super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState...(Bundle outState) { //记录当前的position outState.putInt("position", position); }

1K20
领券