Android Fragment getActivity()= null

Uma*_*Uma 13 android nullpointerexception android-fragments android-activity

我在我的应用程序中使用片段.使用它们时非常常见的问题是使用getActivity()时的NPE.我知道我们可以通过检查是否getActivity() != null每一次或检查片段来解决它isAdded().

在我的一个课程中,我在60多个地方获得了活动的背景.检查getActivity()是否为null或者片段是否仍然添加到所有位置的活动中会使代码变得丑陋,更大且不可维护.有没有其他方法来处理这个?当从活动中删除片段时,甚至可以销毁片段(并在删除时停止它所做的任何工作)?

这是一个建议的方式吗?

han*_*and 11

根据我的经验,大多数返回null的getActivity()都是在异步回调中.

例如,您的片段触发AsyncTask,然后在后台作业完成之前被删除,然后当后台作业完成并在onPostExecute()中调用getActivity()时,它将获得null,因为片段已经从活动.

我的解决方案

1.在每个异步回调的开头检查getActivity()== null,如果是这种情况,则只是中止该方法.

2.在onDetach()中取消异步作业.

我认为这是比在onAttach()中保存活动实例更好的解决方案,因为自从你的片段被移除后,为什么还要麻烦地完成回调中剩下的所有工作(在大多数情况下是UI代码)?