我到处搜索了一种在 Android 应用程序中拥有相当于 main() 函数(是函数不是方法)的方式,但失败了......
通常我想做的是:
void main()
{
// do some really nice initialisations stuff here
// ... let the app does his life, I really don't care
// do some final stuff here before leaving
}
到目前为止,我看到的最接近的方法是使用 SplashScreen 并覆盖 OnCreate() 方法。问题是从我的角度来看这是不可接受的。为什么?因为 SplashScreen 只不过是一个标记为 LAUNCHER 的 Activity。
这使它出现在应用程序列表中,这是我在开发应用程序小部件时不想要的。此外,在应用程序销毁之前将我的代码放在哪里?在 onDestroy() 方法中?不,再一次,这不可靠。Android 可以决定在应用程序仍在运行时删除我的实例。
好吧,事实上,我的原则是我的应用程序的每个组件都在同一个进程中运行,因为我没有在 Manifest 中明确提到我不希望一个组件在自己的进程中运行。
对于应用程序小部件,我将初始化代码放在第一次调用 onUpdate() 方法上。我认为这是一个不错的选择。然后这个应用小部件(更准确地说是 AppWidgetProvider)负责按照自己的意愿启动任何活动。
所有应用程序的“数据库”都在一个单独的单例中定义,如下所示:
public class MyDataBase {
public static MyDataBase getInstance() {
if (instance_ == null)
instance_ = new DataBase();
return instance_;
}
public void load();
public void save();
static MyDataBase instance_ = null;
public int myInt;
public String myString;
public Object myObject;
etc..
}
至少有了这个 Singleton,我敢肯定,它的生命周期与整个应用程序本身相同。
为了支持那个 AppWidgetProvider,我不得不花点心思。实际上,Android 可以决定删除它的实例,而其他一些活动仍然存在并且进程仍在运行。因此,例如,在 OnUpdate() 的第一次调用中系统地加载我的数据库是不必要的并且是多余的。我所做的是有一个静态布尔值,该值指示数据库是否已在此过程的生命周期内加载。因此,AppWidgetProvider 可以实例化大量时间,只要 Singleton DataBase 持续存在(如此过程),它就不会每次都重新加载 DataBase,明白吗?(是的,很难说清楚……)
关于应用程序的清理代码,我想覆盖我的 DataBase Singleton 的 finalize() 方法,但是,我真的不确定这是一个好主意,因为调用此方法的那一刻是完全不可预测的。我想如果你突然关闭你的Android,它会被调用,但是我不确定这里有什么,到目前为止,我还没有找到那个部分的解决方案。
欢迎任何评论或我目前所做的不那么棘手的事情。谢谢。