当前位置: 首页 > 知识库问答 >
问题:

碎片,我什么时候“活动”?

祖奇
2023-03-14

我一直对此感到沮丧,也找不到好的答案,所以希望这里有人能提供指导。

我有一个片段相当广泛地使用了asynctask。片段调用getActivity()(返回null)时,我经常受到错误的困扰。我假设发生这些情况是因为在附加活动之前或分离活动之后调用了片段中的某些方法。

在我的代码中处理这个问题的正确方法是什么?我不想让这个成语到处乱扔,

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

一些人建议在暂停时取消任务,但这意味着标准习惯用语,

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

无法使用。这意味着每个执行的asynctask都需要跟踪到完成或取消。我从未在谷歌或其他地方的示例代码中看到过这一点。比如,

private final Set<AsyncTask<?>> tasks = new HashSet<>;
...
AsyncTask<?> t = new AsyncTask<...>() {
  ...
  public void onPostExecute(...) {
    tasks.remove(this);
    ...
  } 
}
tasks.add(t);
t.execute();
...
@Override
public void onPause() {
  for (AsyncTask<?> t: tasks) {
    t.cancel();
  }
  tasks.clear();
}

共有1个答案

孙帅
2023-03-14

尝试取消onpauseonstop方法中的异步任务。这将防止在片段不再活动时调用OnPostExecute(GetActivity()返回NULL)。

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

 类似资料:
  • 我一直对此感到沮丧,我找不到一个好的答案,所以希望这里有人能提供指导。 我有一个片段非常广泛地使用了。我经常被bug困扰,其中片段调用,返回null。我假设发生这些情况是因为在附加活动之前或分离活动之后调用了片段中的某些方法。 在我的代码中处理这个问题的正确方法是什么?我不想把这个成语到处乱扔, 查看

  • 我可以使用一个片段作为一个活动吗?我已经创建了一个片段,但我希望它有像活动一样的功能,所以我使用片段扩展碎片活动。然而,我有一个带有碎片的导航抽屉。当我更改为“扩展碎片活动”时,我的代码有问题?请给我指路。

  • 由于不推荐使用TabActivity,我需要找到一种方法来使用片段。在我知道它如何工作之前,我已经使用了碎片,但我需要一个指南来创建我的标签主机与碎片活动。我在互联网上找到了几个例子,它们都是关于将片段放入标签的容器中的。

  • 我已经为Android开发了几年了,我仍然发现自己在这个问题上反复思考:什么时候我应该使用backstack中的片段,还是将每个片段放入自己的活动中? 在Android片段文档中,他们展示了如下图: 我完全理解tablet用例,但对于手机用例,我不明白为什么要将每个片段放入自己的活动中。我通常创建一个活动并将片段添加到backstack(通过FragmentManager)。这两种方法中的任何一种

  • 问题内容: 我使用类只有很短的时间,编写方法时,我使所有变量都引用了self,例如self.foo。 但是,我在浏览《 wxPython in Action》 一书时发现,“ self”并没有一直使用。例如: 下面的一个确实使用“自我”。 如果我没记错的话,“自我”是指该类的特定实例,那么什么时候没有必要?有一般的经验法则吗? 问题答案: 您用于引用当前实例的属性。 您用于引用父类的方法。 如果仅

  • 谷歌正在通过电子邮件通知Android位置权限的更改: 我们将于2016年10月15日进行更改,这将影响针对API版本21(Android 5.0、Lollipop)或更高版本的应用程序,这些应用程序使用ACCESS_FINE_LOCATION但没有明确具有“android.hardware.location.gps”用途功能。展望未来,这些应用程序将可安装在没有GPS硬件的设备上。在大多数情况下