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

标签 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();

我曾尝试将 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/

相关文章:

java - Android 头显 "NASA daily image App"

android - Asynctask 在调试版本中正确执行,但在发布版本(已签名的 apk)中无法更新 UI

Android Hierarchy Viewer 不显示 View 的性能指标

android - 错误 android.support.v4.app.Fragment$InstantiationException : Unable to instantiate fragment com. google.android.gms.maps.MapFragment

android - 无法在 HoneyComb 3.2 上安装应用程序 - 它给出 INSTALL_PARSE_FAILED_NOT_APK 错误

Android 找不到以下类 - EditText(更改为 android.widget.EditText、修复构建路径、编辑 XML)

Android MonkeyRunner - 单击按钮时应用程序关闭

android - 当重新创建其布局包含 View 的 Activity 时,是否恢复了 View 的 "tag"?

android - 单一按钮的多种功能

java - 在 setContentView Java 之上实例化对象时出现范围错误