我有一个非常广泛使用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 – 片段,什么时候我“活跃”?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)