Jef*_*man 5 android android-fragments
我一直对此感到沮丧,我找不到一个好的答案,所以希望有人在这里提供指导.
我有一个AsyncTask广泛使用的片段.我一直受到片段调用的错误的困扰getActivity(),它返回null.我假设这些正在发生,因为片段中的某些方法在附加活动之前或分离之后被调用.
在我的代码中处理这个问题的正确方法是什么?我不想让这个成语遍布整个地方,
Activity activity = getActivity();
if (activity != null) { // do something }
Run Code Online (Sandbox Code Playgroud)
看文档的Fragment,我可以想出许多可能钩来解决这个:isDetached(),onActivityCreated(),onAttach(),isResumed(),等.什么是正确的组合?
编辑:
有些人建议在暂停时取消任务,但这意味着标准成语,
new AsyncTask<...>.execute();
Run Code Online (Sandbox Code Playgroud)
不能使用.这意味着每个执行者都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();
}
Run Code Online (Sandbox Code Playgroud)
尝试在onPause或onStop方法中取消您的 AsyncTasks。这将防止当不再活动时(返回)onPostExecute被调用。FragmentgetActivity()null
或者您可以Fragment通过调用this.isAdded()您的Fragment.
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |