首页 > 解决方案 > 创建另一个 Activity 的对象的最佳方法是什么

问题描述

如何获取另一个活动中存在的方法。

例如。

应用活动

public class App extends MultiDexApplication {

    private final String TAG = "App";

    private static App app;  //Danger line of code

    @Override
    public void onCreate() {
        super.onCreate();
        app= this;
    }


    public static synchronized App getInstance(){
        return app;
    }
    
public static void showMsg(){
   Log.i(TAG, "showMsg: Hello WOrld")
}

主要活动

public class MainActivity extends AppCompatActivity{

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_redeem);

        App.getInstance().showMsg(); //Showing error here

    }

我得到了一个错误

引起:java.lang.NullPointerException:尝试在 com.example.test1.MainActivity.onCreate(MainActivity.java:*) 的空对象引用上调用虚拟方法“void com.example.test1.App.showMsg()”

如果我将AppCompatActivity扩展到App并在MainActivity上扩展它,那么我们可以轻松调用App内部的方法

并在“私人静态应用程序应用程序”;由于内存泄漏,这不是最好的方法。

任何解决方案

标签: javaandroid

解决方案


应用程序的 onCreate 最终会调用 Activity 的 onCreate。如果要在应用程序的 onCreate 中保存实例,请在调用 super.onCreate() 之前执行此操作。可能更好的方法是覆盖 Application 中的无参数构造函数,调用 super(),而不是在构造函数中保存实例

public MultiDexApplication() {
    super();
    app = this;
}

或者

public void onCreate() {
    app = this;
    super.onCreate();
}

还要确保您的 App 类被列为要在 AndroidManifest 的应用程序选项卡中使用的类。

    <application android:label="@string/app_name"
       android:icon="@mipmap/ic_launcher"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:name="your.application.package.App"
       >

推荐阅读