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

实现onSaveInstanceState并自定义旋转屏幕后保存文本后应用崩溃

在Android开发中,当屏幕旋转时,系统会销毁当前活动并重新创建一个新的活动实例。为了保持数据的一致性,我们可以使用onSaveInstanceState方法来保存数据并在活动重新创建时恢复数据。

onSaveInstanceState是Activity生命周期中的一个回调方法,用于保存活动的状态。当屏幕旋转或其他配置更改导致活动被销毁时,系统会调用该方法。我们可以在该方法中将需要保存的数据放入Bundle对象中,并在活动重新创建时从Bundle中恢复数据。

以下是实现onSaveInstanceState并自定义旋转屏幕后保存文本后应用崩溃的步骤:

  1. 在活动中重写onSaveInstanceState方法:
代码语言:txt
复制
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("text", editText.getText().toString());
}

在上述代码中,我们将EditText中的文本内容保存到Bundle对象中,键为"text"。

  1. 在活动的onCreate方法中恢复数据:
代码语言:txt
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null) {
        String text = savedInstanceState.getString("text");
        editText.setText(text);
    }
}

在上述代码中,我们首先检查savedInstanceState是否为空,如果不为空,则从Bundle对象中获取之前保存的文本内容,并将其设置到EditText中。

通过以上步骤,我们实现了在屏幕旋转后保存文本并恢复的功能。这样即使应用崩溃,用户重新打开应用时也能恢复之前输入的文本。

推荐的腾讯云相关产品:腾讯云移动应用托管(Mobile Application Hosting)

腾讯云移动应用托管是一项基于云原生技术的移动应用托管服务,提供了全球部署、高可用、弹性伸缩的移动应用托管环境。您可以将移动应用的后端逻辑部署在腾讯云上,实现数据存储、用户认证、推送通知等功能。通过腾讯云移动应用托管,您可以专注于移动应用的开发,而无需关注底层的服务器运维和扩展。

了解更多关于腾讯云移动应用托管的信息,请访问:腾讯云移动应用托管

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Activity详解(二)——异常情况下的生命周期分析

当系统配置发生改变,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState保存当前...如图:当竖切换到横时,测试log如下: ? 当由横切换到竖的时候,测试log如下: ?...和onCreate方法,因为我们可以通过onCreate和onRestoreInstanceState方法来判断Activity是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据恢复,从上图我们可以看出...比如文本框中用户输入的数据,ListVIew滚动的位置等。这些View相关的状态系统都能够默认为我们恢复。...比如我们上文提到的旋转屏幕所造成的Activity异常销毁,这个过程和正常停止Activity是不一样的,因为旋转幕后,Activity被销毁的同时会立刻创建Activity实例,这个时候Activity

1.8K40

Android基础部分再学习---activity的状态保存

在这种情况下,您可以通过回调方法onSaveInstanceState()来保存Activity的一些重要信息,通过onCreate()或者onRestoreInstanceState()回调方法来恢复这些信息...例如,EditText部件保存用户输入的任何文本,CheckBox部件保存是否被选中。我们唯一要做的工作就是提供一个惟一的ID(android:ID属性)为每个widget保存其状态。...所以我们可以用下面的办法,来测试Activity的状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。...,  2, 手机点击Home键和长按Home键 3, 点击电源键锁时 4, 从当前Activity跳到另一个Activity 5, 应用内存不足即将自动销毁时 2.onSaveInstanceState...()这些方法中去 这样来看onSaveInstanceState()的作用就是: onSaveInstanceState()  适合的是当前Activity或者Fragment一旦被系统自己销毁,应用还能在这之前保存一些必要的数据

1K20
  • ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 被设计用来以与生命周期相关的方式保存和管理 UI 相关的数据。ViewModel 允许数据在例如屏幕旋转这样的配置更改依然保留。...注意,很多 UI 数据会自动地被保存和恢复: “该方法的默认实现保存了关于 activity 的视图层次状态的临时信息,例如 EditText 控件中的文本或者 ListView 控件中的滚动条位置。”...这是一个良好的保存和恢复 activity 状态的方法。基于你的 activity 的实现,你可能根本不需要 onSaveInstanceState()。...复杂数据通过本地持久化保存然后用 onSaveInstanceState() 来保存那些复杂数据的唯一 ID。ViewModel 在数据加载将他们保存在内存中。...在这个场景下,ViewModel 在 activity 旋转或者进入后台时仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现

    3.8K30

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 允许数据在例如屏幕旋转这样的配置更改依然保留。...ViewModel 被设计用来以与生命周期相关的方式保存和管理 UI 相关的数据。ViewModel 允许数据在例如屏幕旋转这样的配置更改依然保留。...注意,很多 UI 数据会自动地被保存和恢复: “该方法的默认实现保存了关于 activity 的视图层次状态的临时信息,例如 EditText 控件中的文本或者 ListView 控件中的滚动条位置。”...这是一个良好的保存和恢复 activity 状态的方法。基于你的 activity 的实现,你可能根本不需要 onSaveInstanceState()。...在这个场景下,ViewModel 在 activity 旋转或者进入后台时仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现

    1K20

    Android屏幕旋转之横切换的实现

    实现了App内手机横/竖放置时,屏幕横/竖的切换。记录一下中间需要的关键信息和实现过程。...开门见山的说,实现屏幕自动/手动旋转的方式有两种: 一种是在工程的代码中定义,这种方式在横竖切换时执行的操作是:销毁当前Activity–根据新的屏幕尺寸重建Activity。...另一种是在工程的AndroidManifest.xml中定义,这种定义的方式在某些情况下可以实现“不销毁需要横竖的Activity”,因为这种方式不会销毁Activity重建Activity,因此Activity...(Bundle outState) { super.onSaveInstanceState(outState); //横竖切换前调用,保存用户想要保存的数据,以下是样例 outState.putString...} 番外 我按照上述方法,根据重力传感器实现了屏幕旋转,虽然可以做到屏幕随重力传感器切换,但是发现:无论手机设置中“屏幕旋转”或“方向锁定”是开是关,App内的Activity都会随着手机的横竖方向切换横竖

    7.1K40

    Android Studio 深入研究 之 ✨ -基础知识学习历程(进阶)

    ,则onSaveInstanceState会被系统调用, 这是系统的责任,因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存)。...一个方法,和onCreate同样可以从取出前者保存的数据: 一般是在onStart()和onResume()之间执行!...这个是通过Intent的 intent-filter**来实现的,这个Intent那章会详细讲解!...的每个方法里都添加打印Log的语句,来进行判断,又或者设一个按钮一个TextView点击按钮,修改TextView 文本,然后横竖切换,会神奇的发现TextView文本变回之前的内容了!...如果用户旋转设备这屏幕会横竖切换。 nosensor:忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。

    43240

    安卓activity生命周期_请描述activity的生命周期

    在这种情况下,你可以实现onSaveInstanceState回调方法对有关 Activity 状态的信息进行保存,以确保有关 Activity 状态的重要信息得到保留。...您可以使用上述任一方法从Bundle 提取您保存的状态恢复该 Activity 状态。...具体地讲,默认实现会为布局中的每个View 调用相应的onSaveInstanceState方法,让每个视图都能提供有关自身的应保存信息。...例如,EditText 小部件保存用户输入的任何文本,CheckBox小部件保存复选框的选中或未选中状态。您只需为想要保存其状态的每个小部件提供一个唯一的 ID(通过 android:id 属性)。...如果小部件没有 ID,则系统无法保存其状态。(默认情况下系统不会恢复储存成员值(变量)) 你只需旋转设备,让屏幕方向发生变化,就能有效地测试您的应用的状态恢复能力。

    56310

    Activity 不只有跳转。功能篇(一)

    1.配置改变导致Activity被杀死,横变竖:在onStop之前会调用onSaveInstanceState()保存数据在重建Activity之后,会在onStart()之后调用onRestoreInstanceState...在stop()之前系统会调用onSaveInstanceState()方法,以便您的Activity可以使用一组键值对来保存状态信息。...此方法的默认实现保存有关Activity视图层次结构状态的信息,例如EditText小部件中的文本或ListView的滚动位置。...@Override public void onSaveInstanceState(Bundle savedInstanceState) { // 保存用户自定义的状态 savedInstanceState.putInt...super.onSaveInstanceState(savedInstanceState); } 恢复您的Activity状态   当您的Activity在之前被破坏重新创建时,您可以从Bundle

    1.1K20

    Android入门教程之Activity(生命周期,启动...)

    onStart() 调用使 Activity 对用户可见,因为应用会为 Activity 进入前台支持交互做准备。...Serializable本身是一个接口,自定义的对象实现这个接口,就可以被Intent携带。 比如我们改造一下DataTest类,让它实现Serializable接口。...优先级低的Activity在内存不足被回收怎样做可以恢复到销毁前状态? 优先级低的 Activity 在内存不足被回收重新打开(横竖切换的过程中)会引发Activity重建。...但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。...onSaveInstanceState() 只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。 8. 谈谈横竖切换过程中调用的函数 要切记这里活动已经被销毁了。

    1.1K00

    《Android编程权威指南》之UI状态的保存与恢复篇

    MainActivity和QuizViewModel经历设备旋转 运行GeoQuiz应用日志: 初次打开 旋转设备日志:(可以看出viewmodel并未重建,而是从内存中直接取第一次创建的) 旋转...只在activity实例对象被创建,才需要获取和保存QuizViewModel,也就是说,quizViewModel一次只赋一个值。...3.1 覆盖onSaveInstanceState(Bundle)函数 通过覆盖Activity.onSaveInstanceState(Bundle)的方式,就可以解决上述问题,当应用进程在意外被系统...要测试系统内存不够杀死应用,进入开发者选项,将不保留活动开启,那么在应用启动,点击了home键,系统就是自动去杀死app了。...参考:https://developer.android.com/jetpack 六、深入学习:解决问题要彻底 意思就是通过禁止应用旋转,以此解决设备配置改变带来的UI状态丢失问题的方式太粗暴,也不能从根本解决问题

    61910

    ViewModel

    为了更好地将职能划分清楚,Android为我们提供了ViewModel类,专门用于存放应用程序页面所需要的数据。...二.VIewModel的生命周期特性   由于Android平台的特殊性,若应用程序支持横竖切换,那么当用户旋转手机屏幕的时候,我们还需要考虑数据的存储和恢复。...}); } }); timerViewModel.startTiming(); } }   运行程序旋转屏幕...可以看到,当屏幕发生旋转的时候,计时器仍然在继续,这意味着横竖下的Activity对应的ViewModel是同一个,它所持有的数据一直存在着。...五.ViewModel和onSaveInstanceState()方法   对于页面数据的保存和恢复,也许你有这样的疑问,onSaveInstanceState()方法同样可以解决屏幕旋转带来的数据丢失问题

    22630

    1.2、Activity的状态保存

    Activity状态保存的基本使用 学习Activity的生命周期,我们知道,当Activity进入到paused或者stopped状态,这个Activity的状态仍然保存着。...在这种情况下,您可以通过回调方法onSaveInstanceState()来保存Activity的一些重要信息,通过onCreate()或者onRestoreInstanceState()回调方法来恢复这些信息...例如,EditText部件保存用户输入的任何文本,CheckBox部件保存是否被选中。我们唯一要做的工作就是提供一个惟一的ID(android:ID属性)为每个widget保存其状态。...在这种情况下,记得重写onSaveInstanceState()和onRestoreInstanceState()方法是,记得带上super方法的实现,因为那里就是系统UI组件自动保存和恢复的默认实现。...所以我们可以用下面的办法,来测试Activity的状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。

    85530

    解决Activity重新刷新Fragment的show、hide失效问题

    问题的起因是这样,的笔者有个自定义View,实现的是一个APP首页的底部选择器,通过简单的配置就可以快速实现fragment的切换,优点是添加和移除item非常便捷并且插拔式的设计,帮助新手们快速上手。...即标题,Activity重新刷新Fragment的show、hide失效问题。笔者这里的Activity重新刷新指的是系统崩溃,和横竖切换的时候。...Activity回重新onCreate导致,选择器绑定的fangment因为onSaveInstanceState存储重新创建前的状态,导致没能正确绑定新的fragment。...解决方法: override fun onSaveInstanceState(outState: Bundle?)...{ // super.onSaveInstanceState(outState) } 既然因为onSavaInstanceState导致Fragment的保留,那么我们重写该方法,

    2.4K20

    “终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

    运行,点击按钮 会弹出进度条,2s展示用户信息。接着旋转手机,我们发现用户信息依然存在。来看下效果: ?...Activity旋转重建数据恢复 旋转手机确实是重建了Activity的,日志打印如下: 2021-01-06 20:35:44.984 28269-28269/com.hfy.androidlearning...四、对比onSaveInstanceState() 系统提供了onSaveInstanceState()用于让开发者保存一些数据,以方便界面销毁重建时恢复数据。...这是显而易见的,系统不知道你按下HOME要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...5、屏幕方向切换时,例如从竖切换到横时。

    1.8K10

    生命周期感知 Lifecycle

    例如,如果回调在保存活动状态运行 Fragment 事务,那么它将触发崩溃,因此我们永远都不想调用该回调。 为了简化此用例,Lifecycle 类允许其他对象查询当前状态。...自定义生命周期所有者 支持库 26.1.0 以及更高版本中的 Fragment 和 Activity 已经实现了 LifecycleOwner 接口。...当应用程序在后台运行时,使用生命周期感知组件处理暂停动画绘制,并在应用程序在前台运行恢复绘制。...当通过 onSaveInstanceState() 保存 Fragment 或 AppCompatActivity 的状态时,在调用 ON_START 之前,它的 UI 被认为是不可变的。...保存状态尝试修改 UI 可能会导致应用程序的导航状态不一致,这就是为什么如果状态保存应用程序运行 FragmentTransaction ,则 FragmentManager 会引发异常的原因。

    1.2K20

    Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

    新Activity启动及旧Activity保存流程 App在后台久置,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity...,以及如何避免这些崩溃,还有就是简单的介绍一下onSaveInstanceState与onRestoreInstanceState执行时机与原理,这两个函数也是Android面试时常问的两个点,是比简单的启动模式...,2.3之后,放在了onStop函数之前,也就说Activity失去焦点,可能会由于内存不足,被回收的情况下,都会去执行onSaveInstanceState。...OnRestoreInstanceState的调用时机 之前已经说过,OnRestoreInstanceState虽然与onSaveInstanceState是配对实现的,但是其调用却并非完全成对的,在...在恢复,能自动定位到上次浏览的位置。

    3K30

    《Android编程权威指南》之第二个activity

    create activity 这里介绍一下布局预览,可以直接切换成横预览,偶尔有的布局可以不必特地为横再多写一套布局代码,如果直接横预览没有适配问题的话。...ActivityManager负责创建Activity实例调用其onCreate(Bundle?)...如果已完成声明,则启动activity,应用正常运行。反之,则抛出ActivityNotFoundException异常,应用崩溃。...hl=zh-cn 五、挑战练习:堵住作弊漏洞 既然用户可以通过旋转CheatActivity来清除作弊痕迹,那么要解决此问题,当然就是利用前置知识,在设备旋转或者app被销毁也保存好此作弊痕迹数据就可以啦...,其实跟前面也是一样的,用 ViewModel + onSaveInstanceState()的方式就OK。

    63120

    Activity16问

    横竖切换时Activity生命周期 注意:还有一点,非常重要,一个 Android 的变更细节!...搞懂这个生命周期的执行就可以回答了,首先要知道面试官的意思:是要重新启动恢复这个 Activity 还是说直接退出整个 app 如果要恢复则要在 onSaveInstanceState() 中进行保存数据并在...来捕获全局异常进行退出 app 的操作,这样会减少之前崩溃所造成的后遗症!...Activity 的 Flags 8.内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存,在哪个方法进行 9.onSaveInstanceState() 被执行的场景...系统不知道你按下 HOME 要运行多少其他的程序,自然也不知道 activity A 是否会被销毁 因此系统都会调用 onSaveInstanceState() ,让用户有机会保存某些非永久性的数据

    37510
    领券