获取MainActivity的实例

时间:2018-03-11 07:47:35

标签: android

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

获取MainActivity的实例是否是一个好习惯,以便我可以从另一个类调用MainActivity中的方法?

这是一个例子:

    row←2
    ⎕←col←nlm[row;]⍳2
4
    nlm[;col]  ⍝ values in matched column
4 2

然后这是另一个类:

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();
}

我在看教程时看到了这种类型的编码,并想知道这是一个好习惯还是可能有更好的方法?由于我收到不要将Android上下文类放在静态类

中的警告

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

4 个答案:

答案 0 :(得分:0)

我想你想制作一个活动类的单身

但在所有模式设计

中提及

使用Singleton

If和Only如果它是唯一的方式来创建一个全局变量

Singleton 基于Lazing Initialing和Load On Memory

所以我想如果你不能与Activiy交互你可以使用

BroadCast 意图

答案 1 :(得分:0)

  

获取MainActivity的实例是一种好习惯   我可以从另一个调用MainActivity中的方法   类?

你完全可以做到这一点,但你不需要让它静态并使用构造函数。只需创建一个如下所示的新实例,您就可以访问公共方法

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

关于警告

它建议避免将上下文字段定义为静态。警告本身解释了原因:它是内存泄漏。如果你将它设为静态,它将可以在你的应用程序的任何地方访问,并且一些方法可以在很长一段时间内保持对该上下文的引用,并且它不会被垃圾收集。这将导致outofmemory异常,应用程序可能会崩溃。但是在这里你试图从broadcastreceiver调用showToast(),这样你就可以摆脱静态引用。而且你将来需要它们以安全的方式注入上下文

答案 2 :(得分:0)

您可以从另一个类调用方法:

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

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

public String data() {
    return mangaId;
}

答案 3 :(得分:0)

您无法使用Activity运算符创建new的实例。

您必须使用Intent来创建活动。

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

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