Android生命周期方法似乎不像我需要的那样工作

时间:2011-04-25 16:06:03

标签: android lifecycle

从iOS背景进入Android,我发现Android编程中的生命周期方法没有按照我期望的方式设置。

例如,每次用户开始使用我的应用程序时,我都需要执行一次任务。该应用程序由一个主要活动组成,该活动在运行时产生几个子活动。

如果我将任务放在主活动的onCreate()方法中,它肯定会在用户第一次启动应用程序时调用。但是,如果用户退出应用程序并稍后重新输入,则不会始终调用它。我认为这是因为Android并没有真正破坏Activity,因此它不需要重新创建它。

如果我将任务放在onStart()或onResume()中,那么只要用户启动应用程序就会调用它,但是当它们从其中一个子活动返回时它也会被调用,这不是什么我想要。

在哪里可以将我的任务放在每次用户启动应用程序时执行一次?

感谢。

5 个答案:

答案 0 :(得分:1)

为Main Activity定义一个全局布尔值,例如'showSplash',并将其初始化为“true”。然后,当您第一次调用'onCreate'方法时,将其设置为“false”。然后,无论何时调用'onCreate'方法,都要检查布尔值是否为“false”。如果是,请不要显示启动或任何您想要做的事情,如果没有,请显示或执行您想要做的事情。

修改

不像之前的评论中所说的好方法 - 在onPause()中调用finish()。

答案 1 :(得分:0)

我一直在阅读它并在Application课程中找到了onCreate()方法。

您可以将应用程序子类化并覆盖此方法以实现所需的内容。我认为这就像Cocoa中的Application Delegate类一样,但我并不是100%肯定。

免责声明:尚未尝试过。

答案 2 :(得分:0)

一种不愉快的方法是检查调用/上一个Activity - 如果它不是你自己的,请调用你的初始化代码。 how to know the calling activity in android显示了一种很好的方法。在每个内部活动上使用putExtra(..)方法标记它们是您自己的活动。

答案 3 :(得分:0)

没有尝试过这个,但你可以从android.app.Application类获得一个子类并实现onCreate方法。根据文件

Called when the application is starting, before any other application objects have been created. Implementations should be as quick as poss

答案 4 :(得分:0)

Frank ...我这样做的方法是在onSaveInstanceState中编写一个包,或者在onRetainNonConfigurationState中编写一个可序列化的对象。然后在伪代码中我在onCreate中执行此操作:

state= getLastNonConfigurationStateInstance or 
onCreate(Bundle state)

if (state == null) { // APP LAUNCHED FIRST TIME
... getPrefs
... if (prefs != null) get state from prefs
....getIntent
... if (intent != null) get state from getExtras
... check sharedPrefs for EULA_ACCEPTED_FLAG
// SUPPORT EULA
            SharedPreferences eulaPrefs = getSharedPreferences(PREFERENCES_EULA, MODE_PRIVATE); // singleton
            if (eulaPrefs == null || (eulaPrefs != null && eulaPrefs.getBoolean(PREFERENCE_EULA_ACCEPTED, false) == false)) {
                showDialog(DIALOG_EULA_ACCEPT);  
            }
}
else { // APP LAUNCHED AT LEAST SECOND TIME
...
}