停止其他活动的asynctask

时间:2016-04-22 01:33:13

标签: android android-asynctask

我使用asynctask创建一个app来从服务器下载文件。它有几个活动。我从活动A开始一个asynctask,我想从活动B中停止它。我怎样才能实现它?

3 个答案:

答案 0 :(得分:0)

可以通过在活动B上使用类型化getParentActivity()方法来调用以前活动的公共方法:

((PreviousActivity)getParentActivity()).somePublicMethod();

这仅在您从活动A中打开活动B时才有效。如果您希望能够从所有活动中调用该方法,请尝试创建静态类并保存活动A的实例。这样,无论您身在何处app,该方法可以调用。在执行此操作时也要保持空值。

这是静态类的示例。

public static class Constants{
   public static ActivityA activityAInstance;
}

当您打开ActivityA(onCreate方法)时,保存它的实例:

Constants.activityAInstance = ActivityA.this;

此部分将ActivityA的实例保存到静态类。所以,只要你在应用程序上,就可以访问该实例并调用它的公共方法:

e.g。应用程序在ActivityZ上,你所要做的就是导入静态类并调用ActivityA实例:

Constants.activityAInstance.somePublicMethodToStopTheAsyncTask();

答案 1 :(得分:0)

在我看来,你可以在活动A中设置一个布尔标志,当你运行asynctask时,你应该一直检查这个标志,如果你想停止,你只需要更改标志,这样你就可以改变这个标志在活动B中停止asynctask。

你应该试试这个。

答案 2 :(得分:0)

我认为您可以使用LocalBroadcastIntent将活动B的消息发送到活动A.在A的方法接收器中,您可以调用import java.util.*; import java.util.stream.Collectors; class Data { String stud_id; String stud_name; String stud_location; public Data(String string, String string2, String string3) { this.stud_id=string; this.stud_location=string2; this.stud_name=string3; } public Object getData() { return this.stud_id; } } class Temp3 { public static void main(String args[]) { Map<String, List<Data>> heMap=new HashMap<String, List<Data>>(); Data data1=new Data("1","11","111"); Data data2=new Data("2","22","222"); List<Data> obj=new ArrayList<Data>(); obj.add(data1); obj.add(data2); for (Data heData : obj) { String id = "2"; if (!heMap.containsKey(id)) { ArrayList<Data> CitizenHElist = new ArrayList<Data>(); CitizenHElist.add(heData); heMap.put(id, CitizenHElist); } else { heMap.get(id).add(heData); } } heMap=obj.stream().collect(Collectors.groupingBy(w -> w.stud_location)); System.out.println(heMap); } } 。你应该放置Asynctask.cancel(true)
在你的asynctask循环中,当你致电if(isCanceled()){ break; }时停止任务。