java - 创建另一个 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内部的方法
并在“私人静态应用程序应用程序”;由于内存泄漏,这不是最好的方法。
任何解决方案
解决方案
应用程序的 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"
>
推荐阅读
- c# - Linux MONO 是否支持 ASP.NET Core 2.2 MVC?
- javascript - 如何在本机反应中以表格格式显示数据?
- php - 如何在octobercms中使用路由进行依赖关系?
- c# - 嵌套 ObservableCollection 中的 RaisePropertyChanged 未更新
- group-by - Power BI 中的计算时间加权回报
- javascript - 在 React 中悬停时覆盖,JS 方式
- javascript - 将 href 值更改为 popupid 不起作用
- sql - 如何按季度获得在组织中完成 5 年的员工
- android - 与依赖项 'androidx.vectordrawable:vectordrawable' 冲突
- jquery - Bootstrap:在模态中使用模态的表单实现