我的应用程序具有一些全局/静态数据结构,在显示主要Activity之前需要对其进行初始化,因此我将工作放入了onCreate
的{{1}}方法中,该方法仅显示了2秒钟,开始另一个活动,并完成自身:
SplashActivity
现在,我的应用有时会由于空指针引用而神秘地崩溃-一些全局数据结构未初始化。这只能表示未调用SplashActivity的onCreate方法(对吗?)。
我不知道该如何重现,但它经常发生。我可能将应用程序留在了后台,然后重新输入。但是不应该发布应用程序级别的数据,对吧?
答案 0 :(得分:1)
飞溅活动本质上是短暂的,任何全球数据结构都不应依赖。如果需要,则需要创建一个Application类,并在那里进行所有全局数据结构初始化。这些在应用程序的生命周期内不会超出范围。
答案 1 :(得分:1)
我可能将应用程序留在后台,然后重新输入。但是不应该发布应用程序级别的数据,对吧?
这取决于您说“需要初始化的全局/静态数据结构”的意思。
如果用户离开了您的应用程序,则预计Android操作系统可能会终止您的应用程序进程。发生这种情况时,仅存储在内存中的所有内容都会丢失。
一个常见的例子是一些public static
值,您只需加载一次,然后在整个应用程序中进行引用即可。当操作系统终止您的应用程序进程,然后用户返回到您的应用程序时,该public static
值将需要重新初始化。
答案 2 :(得分:1)
为什么不只是在Application
类中初始化它们
public class MyApplication extends Application {
private int globalData = 0;
public int getGlobalData() {
return globalData;
}
public void setGlobalData(int globalData) {
this.globalData = globalData ;
}
@Override
public void onCreate() {
super.onCreate();
setGlobalData(100)
}
}
更改清单文件中的应用程序标签-
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MyApplication" . // declare the application class
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
现在您可以在
之类的应用中的任何位置访问此文件((MyApplication) getApplicationContext()).getGlobalData()
您的行为是因为,即使尚未关闭应用程序,该应用程序仍在后台运行,Android OS可以清除未使用的初始化变量。