1

我有一个扩展 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 中的调用活动?还是我卡在 MainActivity 中运行 AsyncTask?(我希望这是有道理的,我对 Java 和 OO 编程很陌生。)非常感谢任何帮助!

4

2 回答 2

1

请看我几天前写的这个答案。我认为这里也适用。主要的额外考虑因素是,您的AsyncTask是否需要能够比它的调用 Activity 寿命更长?如果 Activity 有可能关闭或重新启动,请在 onStop() 中终止任务或注意不要使用任何共享字段。

如果您的 AsyncTask 将直接读取属于您传入的 Activity 的任何成员,那么您最好将其保留在 Activity 中。当您希望它独立并能够与多个 Activity 类一起工作时,最好将任务分解为一个独立的类。

另外,考虑在服务而不是活动中进行工作。我是IntentService的忠实粉丝。

于 2012-09-05T22:17:31.077 回答
0

您可以尝试在新类的构造函数中将先前的 Activity 作为上下文传递。

public NewClass(Context mainActivity, String ip, String pn, String, c)

它可能工作,但它似乎有点hacky。

于 2012-09-05T22:14:42.607 回答