嗨,我是安卓新手,还在学习。我的问题是,例如,我有一个在 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
才能创建活动。
因此,您无法获取对活动实例的引用。
活动类可以使用的唯一方法是静态方法。