android – 片段,什么时候我“活跃”?

android – 片段,什么时候我“活跃”?,第1张

概述我一直对此感到沮丧,我找不到一个好的答案,所以希望有人在这里提供指导. 我有一个非常广泛使用AsyncTask的片段.我经常被片段调用getActivity()的bug所困扰,它返回null.我假设这些正在发生,因为片段中的某些方法在附加活动之前或分离之后被调用. 在我的代码中处理这个问题的正确方法是什么?我不想让这个成语遍布整个地方, Activity activity = getActivit 我一直对此感到沮丧,我找不到一个好的答案,所以希望有人在这里提供指导.

我有一个非常广泛使用AsyncTask的片段.我经常被片段调用getActivity()的BUG所困扰,它返回null.我假设这些正在发生,因为片段中的某些方法在附加活动之前或分离之后被调用.

在我的代码中处理这个问题的正确方法是什么?我不想让这个成语遍布整个地方,

Activity activity = getActivity();if (activity != null) { // do something }

看看片段的文档,我可以想出许多可能的钩子来解决这个问题:isDetached(),onActivityCreated(),onAttach(),isResumed()等等.什么是正确的组合?

编辑:

有些人建议在暂停时取消任务,但这意味着标准成语,

new AsyncTask<...>.execute();

不能使用.这意味着每个exec的AsyncTask都需要跟踪完成或取消.我在Google或其他地方的示例代码中从未见过这种情况.就像是,

private final Set<AsyncTask<?>> tasks = new HashSet<>;...AsyncTask<?> t = new AsyncTask<...>() {  ...  public voID onPostExecute(...) {    tasks.remove(this);    ...  } }tasks.add(t);t.execute();...@OverrIDepublic voID onPause() {  for (AsyncTask<?> t: tasks) {    t.cancel();  }  tasks.clear();}
解决方法 尝试在onPause或onStop方法中取消AsyncTasks.这将阻止在片段不再处于活动状态时调用onPostExecute(getActivity()返回null).

或者您可以通过在片段中调用this.isAdded()来检查片段是否已附加.

总结

以上是内存溢出为你收集整理的android – 片段,什么时候我“活跃”?全部内容,希望文章能够帮你解决android – 片段,什么时候我“活跃”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1140928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存