android - 当应用程序从低内存中返回时系统重新创建 fragment

标签 android memory android-viewpager fragment

我的应用有一个 Activity,它有一个 ViewPager。 ViewPager 中有几个 fragment 。

有一个错误。当我点击“主页”隐藏我的应用程序,并启动许多其他应用程序时,这些应用程序是内存 killer ,而不是我点击图标回调我的应用程序, fragment 乱序。

我调试了很多天,最后发现,当应用程序从低内存中恢复时,它会从头开始重新启动 Activity ,我的意思是它从 Activity 的静态初始代码开始到 onCreate()。但是,系统也自动为我创建了 fragment ,这不是我的代码,也没有初始化。

我知道系统想要做什么。它想帮助应用程序恢复内存不足之前的状态。当内存不足时,系统会杀死我的 fragment 。

我有两个问题:

(1) 当系统为我重新创建 fragment 时,我如何接收?我的意思是,我有很多指向旧 fragment 的数据结构,我怎样才能将这个指针更改为新 fragment ?我找到了一种方法,当自动重新创建的 fragment 到达 onAttach() 时,用这个 fragment 的地址替换 Activity 中的旧指针值。就像这样:Viewpager loose fragment connection on low memory kill .如果这是官方方式和最佳方式?

(2) 在某些情况下我真的不需要恢复低内存之前的状态。我想重新启动应用程序以获得清晰的应用程序。那么,是否有一个选项可以防止系统为我重新创建 fragment 或其他状态?

最佳答案

(1) 您需要在覆盖onSaveInstanceState 中保存所有您想要保留的数据。然后在 onCreate 方法中将此状态返回给您。

(2) 如果您的应用程序只有一个 Activity ,您可以从 onStop 覆盖调用 finish。然后,每次将应用发送到后台时,您的应用都会重新启动。

关于android - 当应用程序从低内存中返回时系统重新创建 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062896/

相关文章:

android - 在构造函数 Kotlin 中使用泛型作为参数

c# - 什么是固定对象?

android - SupportMapFragment 与 ViewPager : Cannot move camera or change map settings

android twitter 应用程序,自定义 viewpager 选项卡如何

android - 查看寻呼机指示器 Jake Wharton

android - Flutter Firebase Messaging 无法创建服务 io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

android - 如何将 NavigationView 与标准 Android 主题一起使用?

android - 如何在fragment中实现onclick listview?

c - 判断指针是否映射到当前进程

opengl - 确定内存中已编译着色器的大小