我使用asynctask创建一个app来从服务器下载文件。它有几个活动。我从活动A开始一个asynctask,我想从活动B中停止它。我怎样才能实现它?
答案 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;
}
时停止任务。