Android 调用getSherlockActivity()时获取null

Android 调用getSherlockActivity()时获取null,android,android-asynctask,fragment,Android,Android Asynctask,Fragment,调用getSherlockActivity()时,我得到null 这是因为活动已完成或终止 在我的情况下,我无法想出一个可以避免的解决方案: 此Sherlock活动有一个带有4个选项卡的ViewPager adapter = new PagerAdapter((SherlockFragmentActivity) this, mViewPager); adapter.addTab(actionBar.newTab(), Frag1.class, bundle); adapter.addTab(ac

调用
getSherlockActivity()时,我得到
null

这是因为活动已完成或终止

在我的情况下,我无法想出一个可以避免的解决方案:

此Sherlock活动有一个带有4个选项卡的ViewPager

adapter = new PagerAdapter((SherlockFragmentActivity) this, mViewPager);
adapter.addTab(actionBar.newTab(), Frag1.class, bundle);
adapter.addTab(actionBar.newTab(), Frag2.class, bundle);
adapter.addTab(actionBar.newTab(), Frag3.class, bundle);
adapter.addTab(actionBar.newTab(), Frag4.class, bundle);
启动此活动时,所有选项卡(片段)都有一个异步任务,该任务在
doInBackground
中使用
getSherlockActivity()

因此,要完成所有异步任务,大约需要3-5秒,同时,如果我按back并完成此活动,最后一个尚未启动异步任务的片段Frag4(可能已排队)尝试
getSherlockActivity()
,然后崩溃

我可以用一个Try Catch block来解决这个问题,但是有没有一种方法可以告诉片段如果父活动死了,停止所有的后台任务等等…类似的事情


谢谢

只需在Activity onDestroy()回调中调用每个片段的AsyncTask.cancel()。这样,asynctasks就不会基于已破坏的活动上下文执行任何操作。

是的,这可能是另一种解决方案。但是我必须经常在
onInBackground
中检查
isCancelled()
。它实际上包含15-20次执行。但没有其他(更好的)解决方案:(如果调用了AsyncTask.cancel(),则不再调用onPostExecute()。请在文档中查找。