gpt4 book ai didi

android - fragment ,我什么时候 "active"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:20 25 4
gpt4 key购买 nike

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

我有一个非常广泛地使用 AsyncTask 的 fragment 。我经常被 fragment 调用 getActivity() 的错误所困扰,它返回 null。我假设发生这些情况是因为 fragment 中的某些方法在附加 Activity 之前或分离之后被调用。

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

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

查看 Fragment 的文档,我可以想出许多可能的钩子(Hook)来解决这个问题: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();
...
@Override
public void onPause() {
for (AsyncTask<?> t: tasks) {
t.cancel();
}
tasks.clear();
}

最佳答案

尝试在 onPauseonStop 方法中取消您的 AsyncTasks。这将防止 onPostExecuteFragment 不再处于 Activity 状态时被调用(getActivity() 返回 null) .

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

关于android - fragment ,我什么时候 "active"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15099278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com