如何获取对调用方法的Activity的引用?

时间:2012-09-05 22:10:09

标签: android

我有一个扩展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编程一般都很陌生。)非常感谢任何帮助!

2 个答案:

答案 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。