什么是Android应用程序的main()函数的最佳等价物?

Igo*_*nko 2 java lifecycle android program-entry-point process

我在各地搜索了一个方法,在Android应用程序中具有相当于main()函数(yes函数而不是方法)但是失败了......

通常我想做的是:

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
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我看到的最接近的方法是使用SplashScreen并覆盖OnCreate()方法.从我的角度来看,问题是不可接受的.为什么?因为SplashScreen不是标记为启动器的活动.

这使它出现在应用程序列表中,这是我开发应用程序小部件时不想要的东西.此外,在应用程序销毁之前将代码放在何处?在onDestroy()方法中?不,再一次,这不可靠.Android可以决定删除我的实例,而应用程序仍在运行.

好吧,事实上,我认为我的应用程序的每个组件都在同一个进程中运行,因为我没有在Manifest中明确提到我不是在自己的进程中运行的组件.

在app小部件的情况下,我在第一次调用onUpdate()方法时放置了我的初始化代码.我认为这是一个不错的选择.然后这个应用程序小部件(更准确地说是AppWidgetProvider)负责按照意愿启动任何活动.

所有应用程序的"DataBase"都在单独的Singleton中定义,如下所示:

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..
}
Run Code Online (Sandbox Code Playgroud)

有了这个Singleton我至少可以肯定,它的生命周期与整个应用程序本身相同.

为了支持那个AppWidgetProvider,我不得不欺骗一下.实际上,Android可以决定删除其实例,而其他一些活动仍然存在,并且该过程仍在运行.因此,例如,系统地在OnUpdate()的第一次调用中加载我的DataBase是不必要的并且是过度的.我所做的是有一个静态布尔值,指示数据库是否已在此进程的生命周期中加载.因此,AppWidgetProvider可以实现大量的时间,只要Singleton DataBase持续存在(所以进程),它每次都不会重新加载DataBase,得到它?(很难清楚......)

关于应用程序的清理代码,我想覆盖我的DataBase Singleton的finalize()方法,但是,我真的不确定这是一个好主意,因为调用此方法的时刻是完全不可预测的.我想如果你突然关掉你的Android就会被调用,但是我不确定这里有什么,所以到目前为止,我没有找到解决方案.

任何评论或不那么棘手的东西,我现在所做的是受欢迎的.谢谢.

LMV*_*gel 6

onResume()是在启动app之前总是会达到的函数,因此你可以将'main'代码放在onCreate()方法或onResume()中.

在用户或操作系统销毁应用程序之前,始终会调用onPause().

关于Android文档中的生命周期有很好的解释:

http://developer.android.com/training/basics/activity-lifecycle/starting.html