Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序的main()函数的最佳等价物是什么?_Java_Android_Process_Main_Lifecycle - Fatal编程技术网

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

Java Android应用程序的main()函数的最佳等价物是什么?,java,android,process,main,lifecycle,Java,Android,Process,Main,Lifecycle,我到处寻找一种在Android应用程序中使用main()函数(yes function not method)的方法,但失败了 通常我想做的是: 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 }

我到处寻找一种在Android应用程序中使用main()函数(yes function not method)的方法,但失败了

通常我想做的是:

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只不过是一个标记为启动器的活动

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

事实上,我的原则是,我的应用程序的每个组件都在同一个进程中运行,因为我在清单中没有明确提到我不希望组件在自己的进程中运行

对于应用程序小部件,我将init代码放在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..
}
我敢肯定,至少有了这个单例,它的生命周期与整个应用程序本身是一样的

为了回到AppWidgetProvider,我必须耍点小把戏。事实上,Android可以决定删除它的实例,而其他一些活动仍然在进行,进程仍然在运行。例如,在OnUpdate()的第一次调用中系统地加载我的数据库是不必要的,也是过分的。我要做的是使用一个静态布尔值来指示数据库是否已在该进程的生命周期中加载。 因此,AppWidgetProvider可以被实例化数吨时间,只要Singleton数据库持续存在(进程也是如此),它就不会每次都重新加载数据库,明白吗? (是的,很难弄清楚……)

关于应用程序的清理代码,我想覆盖我的数据库Singleton的finalize()方法,但是,我真的不确定这是一个好主意,因为调用这个方法的时刻是完全不可预测的。我想如果你突然关掉你的安卓系统,它会被调用,但我不确定这里有什么,到目前为止,我还没有找到解决这个问题的方法

欢迎任何评论或我目前所做的不那么棘手的事情。 谢谢。

onResume()是启动应用程序之前始终会达到的函数,因此您可以将“main”代码放入onCreate()方法或onResume()

onPause()总是在用户或操作系统销毁应用程序之前调用

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

到目前为止,我见过的最接近的方法是使用飞溅屏和 重写OnCreate()方法。问题是这是不可接受的 在我看来。为什么?因为溅屏只不过是一个 标记为启动器的活动

这是因为Android是由几个活动组成的,这些活动有生命周期。因此,每个活动都从onCreate()开始,然后在onDestroy()结束。

这使得它出现在应用程序列表中,这是我不想看到的 开发一个应用程序小部件。此外,我的代码应该放在哪里 应用程序销毁了吗?在onDestroy()方法中?不,再一次,这是 不可靠。Android可以决定删除我的实例,而 应用程序仍在运行

在用户按home按钮退出应用程序的场景中,当前活动更有可能调用onPause()方法(仅当该活动没有其他进程要完成时)。然而,当用户强制通过结束进程来关闭(终止)整个应用程序时。那么你就不必担心调用任何方法,因为Android本身会自动关闭与你的应用程序相关的任何东西

为了回到AppWidgetProvider,我必须耍点小把戏。的确 Android可以决定删除它的实例,而其他一些 活动仍在进行,流程仍在运行。所以 例如,在 OnUpdate()是不必要的,也是多余的。我所做的是有一个静电场 布尔值,指示是否已为数据库加载 此过程的生命周期。因此,AppWidgetProvider可以是 只要Singleton数据库持续存在,就会占用大量的时间 (所以这个过程),它不会每次都重新加载数据库,明白吗? (是的,很难弄清楚……)


我认为,您发布的singleton数据库连接示例不错,但是有更好的方法可以更干净、更有效地完成这项工作。例如

对于初始化,您可以超越
应用程序的方法
类:

在应用程序启动时,在创建任何活动、服务或接收器对象(不包括内容提供商)之前调用。实现应该尽可能快(例如使用延迟状态初始化),因为在该函数中花费的时间直接影响启动流程中第一个活动、服务或接收器的性能。如果重写此方法,请确保调用super.onCreate()


解雇更难处理。您可能必须分别监视应用程序的每个组件。如果您的目标是API级别14或更高版本,您可以使用帮助解决此问题。

否、否和否!我熟记这篇关于活动生命周期的文档。在我的例子中,我谈论的是一个拥有大量活动的整个过程,这些活动共享一个公共数据库。入口点不是一个活动,而是一个AppWidgetProvider。那么您可能希望