我有一个扩展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();
我已经尝试将活动作为构造函数中的另一个参数传递,但是当我这样做时,该方法会产生错误。还有另一种方法来引用我的NewClass中的调用Activity吗?或者我是不是从MainActivity运行AsyncTask? (我希望这是有道理的,我对Java和OO编程一般都很陌生。)非常感谢任何帮助!
答案 0 :(得分:1)
请参阅我几天前写的this answer。我认为这也适用于此。主要的额外考虑因素是,您的AsyncTask是否需要能够超过其呼叫活动?如果有可能关闭或重新启动活动,则要么停止onStop()中的任务,要么小心不要使用任何共享字段。
如果您的AsyncTask将直接读取任何成员,这些成员属于您传入的Activity,您也可以将其保留在Activity中。将任务分解为独立课程最好在您希望它独立并能够使用多个Activity类时完成。
另外,请考虑在服务而不是活动中完成工作。我是IntentService的粉丝。
答案 1 :(得分:0)
您可以尝试将上一个Activity作为新类的构造函数中的上下文传递。
public NewClass(Context mainActivity, String ip, String pn, String, c)
它可能有用,但似乎有点hacky。