我有一个独特的问题:
我有一个viewpager绑定到Activity中的tabLayout。 tablayout有5个标签,因此有5个不同的片段。 Activity中有一个微调器,其值定义了每个片段在用户访问选项卡时将显示的内容。所以我创建了一个回调机制,当用户滑动或点击选项卡时,回调被调用到活动中的所有片段,通知片段是否正在向用户显示。在此基础上,进一步使用值绘制视图。
这对我来说就像一个魅力。当应用程序保留在后台(未杀死/完成)约30分钟或1小时或更长时间时,会出现问题。我有华硕Zen手机,它具有提升记忆功能,如果我使用,那么我能够轻松地重现问题。
问题是,经过很长一段时间(出现Android清理内存视图),当我再次启动应用程序时,它会尝试再次绘制相同的视图(不启动启动画面),这是正确的。在活动的onCreate完成后调用片段的onAttach(Activity)。我使用butterknife 7.0.1来绑定视图。片段的onCreateView也被调用,我可以看到recyclerview对象也被绑定并用值初始化。当我点击选项卡时,回调被调用到这个片段,那时我看到相同的recyclerview为null。只有当我们尝试在一段时间后启动应用程序时才会发生这种情况,否则它会很好地运行。
我花了两天时间,但我无能为力使对象无效或正在发生什么。
[解决]
找到解决方案后立即编辑。
问题:操作系统用于在活动的onCreate中收到的onSavedInstance清除之前记住实例,并且我们调用super.onCreate(onSavedInstance);
这基本上就是为什么我们曾经让片段处于初始化状态,然后作为活动一部分的视图寻呼机试图创建新的片段。我不确定为什么在创建新片段时没有调用片段的onCreateView。但是,通过将null传递给super.onCreate(null)来进行活动,onCreate基本上确保没有状态被保存,我们得到了一个干净的新发布。
答案 0 :(得分:0)
我也遇到了同样的问题,可以轻松复制: 转到开发者选项 - >应用 - >不要保持活动并启用它。 通过这种方式,可以模拟操作系统清洁,并且可以避免等待数小时以重现崩溃。