我有一个扩展 AsyncTask 以发送以太网消息的类。在我的 MainActivity 中创建和调用时,它工作正常:
new SendCommandTask(MainActivity.this).execute(ipAddress, portNum, message);
但是,我想将其嵌入到新类的方法中......
public class NewClass{
String ipAddress;
String portNum;
String command;
public NewClass(String ip, String pn, String, c){
ipAddress = ip;
portNum = pn;
command = c;
}
public send(){
SendCommandTask(MainActivity.this).execute(ipAddress, portNum, command);
}
}
... 并直接从我的 MainActivity 调用该方法:
NewClass newClass = new NewClass;
NewClass.send();
我曾尝试将 Activity 作为构造函数中的另一个参数传递,但是当我这样做时该方法会呕吐。是否有另一种方式来引用我的 NewClass 中的调用 Activity?还是我一直在从 MainActivity 运行 AsyncTask? (我希望这是有道理的,总的来说,我对 Java 和 OO 编程还很陌生。)非常感谢任何帮助!
最佳答案
请参阅this answer我几天前写的。我认为它也适用于此。主要的额外考虑是,您的 AsyncTask是否需要能够比其调用 Activity 更长寿?如果 Activity 有任何可能被关闭或重新启动,要么在 onStop() 中终止任务,要么注意不要使用任何共享字段。
如果您的 AsyncTask 将直接读取您传入的 Activity 中的任何成员,您最好将其保留在 Activity 中。当您希望它是独立的并且能够与多个 Activity 类一起工作时,最好将任务分解到一个独立的类中。
另外,考虑在服务而不是 Activity 中完成工作。我是IntentService的 super 粉丝.
关于android - 如何获取调用方法的 Activity 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290502/