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

旋转显示时回收丢失数据,按下Android时加载数据

是指在Android开发中,当设备发生旋转或按下返回键等操作时,Activity会被销毁并重新创建,这可能导致之前加载的数据丢失。为了解决这个问题,可以采取以下方法:

  1. 保存和恢复数据:可以使用Bundle对象在Activity销毁前保存数据,并在重新创建时恢复数据。可以通过重写onSaveInstanceState()方法保存数据,并在onCreate()或onRestoreInstanceState()方法中恢复数据。
  2. 使用ViewModel:ViewModel是Android架构组件之一,用于在Activity和Fragment之间存储和管理数据。ViewModel对象在配置更改时保持活动状态,因此可以在旋转屏幕时保留数据。
  3. 使用持久化存储:如果需要长期保存数据,可以使用数据库或文件存储来持久化数据。Android提供了SQLite数据库和SharedPreferences等机制来实现数据的持久化存储。
  4. 使用异步任务或线程:在加载数据时,可以使用异步任务或线程来执行耗时操作,以避免阻塞主线程。这样即使Activity被销毁,数据加载仍然可以继续进行。
  5. 使用缓存机制:可以使用缓存机制来缓存已加载的数据,以便在重新创建Activity时可以直接从缓存中获取数据,而不需要重新加载。
  6. 使用网络请求库:如果需要从网络获取数据,可以使用网络请求库(如OkHttp、Retrofit等)来处理网络请求。这样即使Activity被销毁,网络请求可以继续进行,并在重新创建时加载数据。
  7. 使用合适的生命周期方法:在Activity的生命周期方法中,可以根据需要加载或释放数据。例如,在onCreate()方法中加载数据,在onDestroy()方法中释放资源。
  8. 使用合适的数据加载策略:根据具体需求,选择合适的数据加载策略。例如,可以使用分页加载、懒加载等策略来提高数据加载效率。

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

  • 腾讯云数据库:提供多种数据库服务,包括云数据库MySQL、云数据库Redis等。链接地址:https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):提供高可靠、低成本的云存储服务,适用于存储和处理各种类型的数据。链接地址:https://cloud.tencent.com/product/cos
  • 腾讯云移动推送:提供消息推送服务,帮助开发者实现消息推送功能。链接地址:https://cloud.tencent.com/product/tpns
  • 腾讯云人工智能:提供多种人工智能服务,包括图像识别、语音识别、自然语言处理等。链接地址:https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

在MainActivity完成使命销毁(比如用户了回退键),ViewModel-Activity这对好朋友也就从内存里抹掉了。...当某个对象强引用另一个要被销毁的对象,内存泄漏就会发生。这样的强引用会阻止垃圾回收器从内存里清理对象。设备配置改变带来的内存泄漏是常见问题。...三、进程销毁保存数据 上面讲述的是发生屏幕旋转等配置更改的情况,activity会被销毁和重启,这个时候可以用viewmodel来自动保存数据与获取数据。...但是,如果是整个Android系统内存不够用的情况,app又不在前台,系统是可能直接清除掉整个app的进程,这个时候,viewmodel 就不管用了,因为它也不在了。...参考:https://developer.android.com/jetpack 六、深入学习:解决问题要彻底 意思就是通过禁止应用屏旋转,以此解决设备配置改变带来的UI状态丢失问题的方式太粗暴,也不能从根本解决问题

61910
  • Cocos Creator 出新版本啦, 2.1.2 圆形Shader终于可以完美解决了!

    所谓的分包加载,就是把游戏内容一定规则拆分为几个包,在首次启动先下载必要的包,这个必要的包我们称为「主包」,开发者可以在主包内触发其它分包的下载,从而把首次启动的下载耗时分散到游戏运行中。...[#5198] 在 Android 上将 V8 升级到了 7.5 VideoPlayer 适配到了微信小游戏 Editor 修复从 v2.0 升级上来后,AnimationClip 中的旋转数据丢失的问题...修复从 v2.0 升级上来后,场景和 Prefab 中的节点在特定角度旋转值会丢失的问题 修复某些机器上打开项目一直停在“正在导入资源,请稍候”界面的问题 修复项目构建后压缩纹理可能会缺失的问题(...组件在编辑器中填入的文本被自动换行后,有可能会在行首生成一个空格的问题 修复层级管理器和资源管理器合并到同一个面板,内容显示不全的问题 Engine 修复场景延迟加载资源会导致 3D 模型无法显示的问题...适配模式为 SHOW_ALL ,EditBox 输入框位置异常的问题 [#162] 修复 Android 上在通知中心显示锁屏,音频不会暂停的问题[#1788] 修复 Android 上屏幕亮屏

    3.1K30

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

    如果你允许在类似设备突然关机的情况丢失数据,你可以在 'onStop()'回调的时候将其保存,这个方法在 activity 一进入后台的时候就会被调用。...onSaveInstanceState() 在配置更改期间和 activity 进入后台被调用;在这两种情况,如果你的数据被保存在 ViewModel 中,实际上并不需要重新加载或者处理他们。...Loader 是 UI 控制器用来加载数据的。此外,Loader 可以在配置更改期间保留,比如说在加载的过程中你旋转了手机屏幕。这听起来很耳熟吧!...ViewModel 保证配置更改后数据丢失。LiveData 保证 UI 与数据同步更新。Room 确保你的数据库更新,LiveData 被通知到。...在这个场景,ViewModel 在 activity 旋转或者进入后台仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

    1K20

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

    如果你允许在类似设备突然关机的情况丢失数据,你可以在 'onStop()'回调的时候将其保存,这个方法在 activity 一进入后台的时候就会被调用。...onSaveInstanceState() 在配置更改期间和 activity 进入后台被调用;在这两种情况,如果你的数据被保存在 ViewModel 中,实际上并不需要重新加载或者处理他们。...一般地,当我在 Android 手机上关闭然后重新打开 Chrome ,返回到了关闭 Chrome 之前正在浏览的页面。...ViewModel 保证配置更改后数据丢失。LiveData 保证 UI 与数据同步更新。Room 确保你的数据库更新,LiveData 被通知到。 ?...在这个场景,ViewModel 在 activity 旋转或者进入后台仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

    3.8K30

    Bitmap.recycle引发的血案

    从Bitmap.recycle说起 在Android中,Bitmap的存储分为两部分,一部分是Bitmap的数据,一部分是Bitmap的引用。...在Android2.3代,Bitmap的引用是放在堆中的,而Bitmap的数据部分是放在栈中的,需要用户调用recycle方法手动进行内存回收,而在Android2.3之后,整个Bitmap,包括数据和引用...注释 道理来说,bitmap与create出来的targetBmp应该是两个对象,当旋转角度正常的时候,确实也是这样,但当旋转角度比较奇葩的时候,这两个bitmap对象居然变成了同一个!...bitmap3.png 当图像的旋转角度小余两个像素点之间的夹角,图像即使选择也无法显示,因此,系统完全可以认为图像没有发生变化,因此,注释中的情况,是不是有可能就是说的这种情况呢?...我还没有来得及继续验证,希望大家可以一起讨论~有说的不对的还请指教。 然而…… 然而,教训是,在不兼容Android2.3的情况,别在使用recycle方法来管理Bitmap了,那是GC的事!

    3.2K20

    Android 基础面试常常吊死在这几个问题上……

    9、面试官:说一Android的几种启动模式吧!他们分别是干什么的? 10、面试官:当旋转屏幕,Activity如何响应? 11、面试官:你是如何做到旋转屏幕防止数据重新加载和重置的?...应聘者:旋转屏幕,当前的 Activity 实例将被破坏,并以新的方向创建Activity的新实例。旋转屏幕,由于屏幕旋转时会重新创建布局,将首先调用onCreate() 方法。...接下来照常顺序执行! 第三波 11、面试官:你是如何做到旋转屏幕防止数据重新加载和重置的?...应聘者:它是一个列表,有自己的适配器,在 onBindViewHolder 方法中进行数据的绑定的! 面试官:我给你补充一! RecyclerView 在显示较长的项目列表。...这就是为什么 RecyclerView 会利用以下事实:滚动,新行出现在屏幕上,而旧行消失在屏幕上。代替为每个新行创建新视图,而是通过将新数据绑定到旧视图来对其进行回收和重用! 应聘者:我学到了!

    2K20

    最新 Android 面试点梳理,我收藏了你呢?

    不考虑自定义加载器,系统类加载器需要网上询问两层,所以叫双亲 判断是否是同一个类,除了类信息,还必须同一个类加载器 优点:防止重复加载,父加载加载过了就没必要加载了;安全,防止篡改核心库类 Android...,之后有独立的渲染线程,可以平移、旋转、缩放 SurfaceTexture:将图像流转为 OpenGL 外部纹理,不直接显示 GLSurfaceView:加入 EGL 管理,自带 GL 上下文和 GL...,执行速度更快 ART 存储机器码占用空间更大,空间换时间 Android 系统启动流程 电源键 -> 加载引导程序 BootLoader 到 RAM -> 执行 BootLoader 程序启动内核...,可查看实例占用空间、引用关系等 Android Studio 自带的 Profiler LeakCanary:通过弱引用和引用队列监控对象是否被回收,比如 Activity 销毁开始监控此对象,检测到未被回收则主动...Plugin API 自定义插件,应用自定义的 TransForm JetPack LiveData 感知声明周期原理:像 Glide 一样给界面添加了无视图的 Fragment ViewModel 界面旋转短暂销毁重建保存数据原理

    71621

    仿bilibili刷新按钮的实现

    简述 最近跟小伙伴一起讨论了一,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发现并弥补自身的不足...该按钮由3部分组成,分别是圆角矩形、文字、旋转图标。在点击按钮后,开始加载数据旋转图标发生旋转数据加载完成后,旋转图标复位并停止旋转。话不多说,开始敲代码。...在安卓中,文字的绘制跟其它绘制是不同的,例如,圆角矩形和旋转图标的绘制起点是左上角,而文字则是文字左下字为起点,也就是基线(Baseline)来绘制,故需要得到基线起点的坐标。 ?...先说x,一般需要让文字居中显示(跟文字的对齐方式也有关系,这里以默认的左对齐为例),所以计算公式一般为: x = 控件宽度/2 - 文字长度/2。...但是,有一点需要注意,iconSize是我自己定的一个大小,并不是图标的实际大小,所以在往后做旋转动画获取到的旋转中心会有误差,将导致图标旋转不是中心进行旋转

    1.5K80

    安卓中activity的生命周期_activity生命周期调用顺序

    此时Activity显示到前台。 (5)onPause:表示Activity正在停止,此时可以做一些存储数据、停止动画等操作,但不宜太耗时。...异常情况的Activity生命周期 所谓异常情况的生命周期,是指Activity被系统回收或者当前设备Configuration改变导致的Activity被销毁重建。...当然是有方法去阻止系统去重建Activity的,我们可以为Activity指定configChanges属性: (1)比如我们不想在屏幕旋转重建Activity,那么就可以指定android:configChanges...(3)screenSize属性和smallestScreenSize属性比较特殊,他们是API13添加的。分别表示的情况为屏幕尺寸发生变化和切换到外部显示设备。...Android为什么要设计一个生命周期呢 Google官方文档解释说,确保提供一个流畅的用户体验,在Activity切换,以及你的Activity意外销毁的情况,保存好Activity状态。

    88410

    Android开发高级系列】AndroidManifest.xml专题

    (android:description),这些字符串资源就可以显示给用户。...比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态,此时可将此属性设置为true。     ...正常情况.如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity.就会从onCreate开始重新加载.         ...举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity...当然前提是这些应用都没有被销毁,所以刚才是的HOME键,如果下了返回键,则无效。

    78050

    Android开发仿bilibili刷新按钮的实现代码

    一、简述 最近跟小伙伴一起讨论了一,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发现并弥补自身的不足...该按钮由3部分组成,分别是圆角矩形、文字、旋转图标。在点击按钮后,开始加载数据旋转图标发生旋转数据加载完成后,旋转图标复位并停止旋转。话不多说,开始敲代码。...在安卓中,文字的绘制跟其它绘制是不同的,例如,圆角矩形和旋转图标的绘制起点是左上角,而文字则是文字左下字为起点,也就是基线(Baseline)来绘制,故需要得到基线起点的坐标。 ?...但是,有一点需要注意,iconSize是我自己定的一个大小,并不是图标的实际大小,所以在往后做旋转动画获取到的旋转中心会有误差,将导致图标旋转不是中心进行旋转。...最后还需要调用recycle()方法回收TypedArray。

    93820

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

    Back返回MainActivity 由于之前MainActivity进入停止状态,所以onRestart()执行,又会依次执行onStart()和onResume(),但onCreate()不会执行...Back退出程序 依次执行onPause(),onStop(),onDestroy()方法,最终销毁MainActivity。...活动被回收怎么办 当一个活动进入停止状态,有可能被系统回收,那么当有一个活动A,在A基础上启动了活动B,A进入停止状态,这时由于系统内存不足,A被回收掉,这时Back键还是会正常显示A,但是不会执行...但是A中可能存有临时数据,这样数据也会丢失。Activity提供了一个onSaveInstanceState()回调方法,这个方法保证活动在被回收之前一定会被调用。...,一直使用的onCreate()方法也有个Bundle类型参数,这个参数一般情况都是null,但是如果活动被系统回收之前有通过onSaveInstanceState()方法保存数据的话,这个参数就会带有之前保存的全部数据

    37120

    Android多线程:AsyncTask使用教程(含实例讲解)

    实例讲解 下面,我将用1个实例讲解 具体如何使用 AsyncTask 6.1 实例说明 点击按钮 则 开启线程执行线程任务 显示后台加载进度 加载完毕后更新UI组件 期间若点击取消按钮,则取消加载 如下图...="wrap_content" android:text="还没开始加载!"...即 任务实例) * 注:AsyncTask子类的实例必须在UI线程中创建 */ mTask = new MyTask(); // 加载按钮...会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露 使用建议 AsyncTask应被声明为Activity的静态内部类 7.3 线程任务执行结果 丢失...结论 当Activity重新创建(屏幕旋转 / Activity被意外销毁后恢复),之前运行的AsyncTask(非静态的内部类)持有的之前Activity引用已无效,故复写的onPostExecute

    80120

    高性能图片优化方案

    加载图片显示到手机通过代码,将这张图片加载进内存,会先解析(也就是解码操作)图片文件本身的数据格式,然后还原为位图,也就是 Bitmap 对象。...用到三级缓存显示显示结果,可能需要做些动画(淡入动画,crossFade等);比如glide设置显示的时候可以添加动画效果02.图片内存计算方式2.1 如何计算占用内存如果图片要显示Android设备上...LinkedHashMap 构造函数的第三个参数:accessOrder,传入true, 元素会访问顺序排列,最后访问的在遍历器最后端。...如果使用了这个设置字段,decode 方法会在加载 Bitmap 数据的时候去重用已经存在的 Bitmap。这意味着 Bitmap 的内存是被重新利用的,这样可以提升性能,并且减少了内存的分配与回收。...解决这个问题很自然想到的两步走,首先是要自动识别图像方向,计算旋转角度,然后对图像进行旋转显示

    84130

    Android高级图片滚动控件,编写3D版的图片轮播器

    这里我们将思维发散一,允许在一个界面上同时显示三张图片,再通过Camera的方式对左右的两张图进行3D旋转,这样就能制作出一种立体的图片轮播器了,原理示意图如下所示: ?...然后还提供了一个setRotateData()方法,用于设置当前图片的下标和滚动距离,有了这两样数据就可以通过computeRotateData()方法来计算旋转角度的一些数据,以及通过isImageVisible...接下来当图片需要绘制到屏幕上的时候就会调用onDraw()方法,在onDraw()方法中会进行判断,如果当前图片可见就调用computeRotateData()方法来计算旋转所需要的各种数据,之后再通过...event.getAction(); float x = event.getX(); switch (action) { case MotionEvent.ACTION_DOWN: // 记录的横坐标...接着当手指在Image3DSwitchView控件上滑动的时候就会进入到onTouchEvent()方法中,当手指时会记录的横坐标,然后当手指滑动时会计算出滑动的距离,并调用scrollBy(

    3.9K81

    Android高级图片滚动控件实现3D版图片轮播器

    这里我们将思维发散一,允许在一个界面上同时显示三张图片,再通过Camera的方式对左右的两张图进行3D旋转,这样就能制作出一种立体的图片轮播器了,原理示意图如下所示: ?...然后还提供了一个setRotateData()方法,用于设置当前图片的下标和滚动距离,有了这两样数据就可以通过computeRotateData()方法来计算旋转角度的一些数据,以及通过isImageVisible...接下来当图片需要绘制到屏幕上的时候就会调用onDraw()方法,在onDraw()方法中会进行判断,如果当前图片可见就调用computeRotateData()方法来计算旋转所需要的各种数据,之后再通过...event.getAction(); float x = event.getX(); switch (action) { case MotionEvent.ACTION_DOWN: // 记录的横坐标...接着当手指在Image3DSwitchView控件上滑动的时候就会进入到onTouchEvent()方法中,当手指时会记录的横坐标,然后当手指滑动时会计算出滑动的距离,并调用scrollBy(

    3.2K10

    Android 系统开发_四大组件篇 -- 探讨 Activity 的生命周期

    image.gif Back 键返回 MainActivity 也应该只有 onResume() 方法会得到执行。...场景 比如我们看以下的场景: 应用中有一个活动 A ,用户在活动 A 的基础上启动了活动 B ,活动 A 就进入了停止的状态,这个时候由于系统内存不足,将活动 A 回收掉了,然后用户 Back 键返回活动...,A 活动重新创建,那么数据丢失了),此时会严重影响用户体验,该怎么办?...策略 其实官方文档给出了解决方案,Activity 中提供了一个 onSaveInstanceState() 回调方法,这个方法可以保证在活动被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收临时数据得不到保存的问题...这个参数一般情况是 null ,但是如果在活动被系统回收之前有通过 onSaveInstanceState() 方法来保存数据的话,这个参数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法将数据取出即可

    46220
    领券