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】:

FragmentManageronAttach() 之后不久设置片段的mActivity 字段,并在onDetach() 之后不久将其设置为null(参见source code),所以我猜你正在尝试执行@987654327 @ 在片段生命周期中太早或太晚。

【讨论】:

以上是关于Fragment 中的计划任务将 getActivity 返回为 null的主要内容,如果未能解决你的问题,请参考以下文章

任务计划程序 2.0 将当前计划任务填充到 WPF GridView

JMeter组件之Test Fragment

当我尝试将任务计划程序中的信息导出到 csv 文件时出现错误:无效的参数/选项 - '>'

使用 C# 的任务计划程序中的常规设置

任务计划程序 - 将历史信息获取到脚本变量中

在Windows中啥是计划任务?