我了解活动/片段的基本生命周期,但是有时候,当用户长时间将应用置于后台状态时,我不确定再次打开该应用会发生什么。最近我遇到了一个错误:用户通过调用保存在类的OnResume方法内的类变量(textView = findViewById(...))中的视图的方法来获取nullpointer异常。该变量在OnViewCreated()中设置。是否有可能在很长一段时间内由于缺少内存而导致片段丢失其字段?何时调用onResume()以及何时调用onCreate()?
答案 0 :(得分:1)
如果应用长时间在后台运行,则其进程将被操作系统终止,或者设备运行的内存不足。要测试您的应用在这种情况下的工作方式,请在设备的“开发人员”选项中使用标志"Do not keep activities"
。在上述情况下,onCreate
将在Activity出现在前台时被调用。
如果该进程尚未终止,则将触发onResume
。普通变量仍然存在,但是问题在于您无法确定何时调用onResume
和何时调用onCreate
(因为您无法控制Android何时开始向其扔东西窗外的堆栈...当前未使用的任何东西都可以销毁)。
因此,我的解决方案是添加一个带有if条件的空检查:如果变量为null,则初始化并执行操作,如果不是,则只是执行操作。