【问题标题】:Scheduled Task in Fragment returns getActivity as nullFragment 中的计划任务将 getActivity 返回为 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,您都应该在服务中对其进行更新。

标签: android timer android-fragments android-asynctask android-tabactivity


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多