我可以访问活动中的所有片段对象..但是我想点击Fragment A
中的按钮停止AsyncTask
中正在运行的Fragment B
..怎么可能?< / p>
答案 0 :(得分:1)
Fragments
不应直接与另一个人互动;管理Activity
是Fragments
的任务。
话虽这么说,你可以使用像Otto
这样的事件总线发送&#34;消息&#34;到您的应用程序的其他部分。
它与Broadcast Receiver
不同,因为没有IPC开销,有点像使用LocalBroadcastManager
,但更可重用。
您也可以使用接口,但为什么可以使用事件总线并拥有组件 尽可能松散耦合。
答案 1 :(得分:0)
首先,保留你发射的任务的参考。然后,您可以在按下按钮时使用AsyncTask.cancel
取消任务。取消此处只会阻止在onPostExecute
之后调用doInBackground
并导致onCancelled
被调用。
但是,如果您需要在 doInBackground
期间取消任务,则可以使用自己的类扩展AsyncTask
并使用布尔值和设置器。根据任务的性质,您可以在doInBackground
中的不同点检查布尔值并正确处理取消。
使用生命周期回调(例如onDestroyView
或onDetach
(在第一个片段上)取消任务也可能更简单。
答案 2 :(得分:0)
我更喜欢 communicating using interfaces, same as this link ,
你需要为Stoping AsyncTask定义一个接口,在接收来自Fragment B的回调以停止AsyncTask时,你的活动可以要求片段A停止AsyncTask。