获取 MainActivity 的实例



嗨,我是安卓新手,还在学习。我的问题是,例如,我有一个在 MainActivity 中创建的方法,我需要从另一个类调用它。

获取 MainActivity

的实例是否是一种好的做法,以便我可以从另一个类调用 MainActivity 中的方法?

这是一个示例:

public class MainActivity extends AppCompatActivity {
   private static MainActivity inst;
public static MainActivity instances()
{
    return inst;
}
@Override
public void onStart() {
    super.onStart();
    inst = this;
}
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void showToast (String text){
    Toast.makeText(inst, text, Toast.LENGTH_SHORT).show();
}

那么这是另一个类:

public class broadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
  MainActivity instance = new MainActivity();
 instance.showToast(AnyText);
    }
}

我在查看教程时看到了这种类型的编码,想知道这是否是一种好的做法,或者可能有更好的方法?由于我收到警告 不要将Android上下文类放在静态类中

提前感谢您的任何见解或帮助! :D

我猜你想做一个单例的活动类

但正如所有图案设计中提到的

使用单例

当且仅当它是制作全局变量的唯一方法

单例基于延迟初始化和内存加载

所以我想如果你不能与活动互动,你可以使用

广角意图

你可以像这样从另一个类调用方法:

MainActivity instance = new MainActivity();
String data = instance.data();

并在该类中创建数据方法:

public String data() {
    return mangaId;
}

获取主活动的实例是否是一种好的做法,以便 我也许可以从另一个调用主活动中的方法 .class?

您完全可以执行此操作,但不需要将其设置为静态并使用构造函数。只需创建一个新实例,如下所示,您将访问公共方法

MainActivity mainActivity = new MainActivity();
mainActivity.showToast(text);

关于警告

它建议避免将上下文字段定义为静态字段。警告本身解释了原因:这是内存泄漏。如果将其设置为静态,则可以在应用中的任何位置访问它,并且某些方法可以将对此上下文的引用保存很长时间,并且不会被垃圾回收。这将导致内存不足异常,并且应用程序可能会崩溃。但是在这里,您尝试从广播接收器调用showToast(),以便您可以摆脱静态引用。如果你将来需要它们,你可以安全地注入上下文

不能使用 new 运算符创建Activity的实例。

您必须使用Intent才能创建活动。

因此,您无法获取对活动实例的引用。

活动类可以使用的唯一方法是静态方法。

最新更新