如何从另一个片段B中停止片段A中的AsyncTask

时间:2014-05-06 17:04:07

标签: android android-asynctask fragment

我可以访问活动中的所有片段对象..但是我想点击Fragment A中的按钮停止AsyncTask中正在运行的Fragment B ..怎么可能?< / p>

3 个答案:

答案 0 :(得分:1)

Fragments不应直接与另一个人互动;管理ActivityFragments的任务。

话虽这么说,你可以使用像Otto这样的事件总线发送&#34;消息&#34;到您的应用程序的其他部分。

它与Broadcast Receiver不同,因为没有IPC开销,有点像使用LocalBroadcastManager,但更可重用。

您也可以使用接口,但为什么可以使用事件总线并拥有组件 尽可能松散耦合。

答案 1 :(得分:0)

首先,保留你发射的任务的参考。然后,您可以在按下按钮时使用AsyncTask.cancel取消任务。取消此处只会阻止在onPostExecute之后调用doInBackground并导致onCancelled被调用。

但是,如果您需要在 doInBackground期间取消任务,则可以使用自己的类扩展AsyncTask并使用布尔值和设置器。根据任务的性质,您可以在doInBackground中的不同点检查布尔值并正确处理取消。

使用生命周期回调(例如onDestroyViewonDetach(在第一个片段上)取消任务也可能更简单。

答案 2 :(得分:0)

我更喜欢 communicating using interfaces, same as this link

你需要为Stoping AsyncTask定义一个接口,在接收来自Fragment B的回调以停止AsyncTask时,你的活动可以要求片段A停止AsyncTask。