Fragment 中的计划任务将 getActivity 返回为 null
Posted
技术标签:
【中文标题】Fragment 中的计划任务将 getActivity 返回为 null【英文标题】:Scheduled Task in Fragment returns getActivity as null 【发布时间】:2013-09-05 22:33:03 【问题描述】:我知道以前有人问过类似类型的问题。抱歉再次询问。 我在标签 FragmentActivity 中有一个片段。在 onActivityCreated 的片段中,我必须在每个修复间隔后安排一个任务。
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask()
@Override
public void run()
getActivity().runOnUiThread(new Runnable()
@Override
public void run()
new fetchDataInBackground(ctx).execute(); //async task
);
, 0, 20000);
上面的代码运行良好,直到我们在 tab 活动上按下返回按钮。 一旦按下后退按钮,它就会在上述代码的 getActivity() 上引发空指针异常。 我猜可能是片段已与活动分离,因此 getActivity() 返回 null。 我的问题是如何实现上述场景,以便即使按下后退按钮,该过程也应该继续。有什么最佳实践吗? 我正在从 FragmentPageAdapter 的 getItem 方法中返回相同的 Fragment 实例。
提前致谢!
【问题讨论】:
您正在为您的 Fragment 加载图像,如果您的 Fragment 不再存在,继续加载它是否有意义? 抱歉方法名称错误。编辑了方法名称。我的意思是在后台获取任何数据。 如果您希望更新数据,无论是否显示 Fragment,您都应该在服务中对其进行更新。 【参考方案1】:FragmentManager
在onAttach()
之后不久设置片段的mActivity
字段,并在onDetach()
之后不久将其设置为null
(参见source code),所以我猜你正在尝试执行@987654327 @ 在片段生命周期中太早或太晚。
【讨论】:
以上是关于Fragment 中的计划任务将 getActivity 返回为 null的主要内容,如果未能解决你的问题,请参考以下文章
任务计划程序 2.0 将当前计划任务填充到 WPF GridView