我一直对此感到沮丧,我找不到一个好的答案,所以希望这里有人可以提供指导。
我有一个使用AsyncTask
非常广泛的片段。我经常被片段调用的错误所困扰getActivity()
,它返回null。我假设这些正在发生,因为片段中的某些方法在附加活动之前或分离之后被调用。
在我的代码中处理这个问题的正确方法是什么?我不想让这个成语到处乱扔,
Activity activity = getActivity();
if (activity != null) { // do something }
查看文档Fragment
,我可以想出许多可能的钩子来解决这个问题: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();
}