Android - 应用程序onCreate方法 - 它总是先被调用吗?

时间:2014-01-31 15:54:37

标签: android

我正在准备我的某个应用程序的新版本,并且我在我的应用程序中进行了如此大的更改,我需要在更新应用程序后完全做一些数据转换,这绝对是第一件事(在做其他任何事情之前)。我想,最好的地方就是在我的类(扩展Application)中的onCreate()方法。我测试了几次,它似乎工作正常,但后来我读了文档:

  

需要维护全局应用程序状态的基类。   您可以通过在其中指定其名称来提供自己的实现   您的AndroidManifest.xml标签,[b]将导致   当你的过程为你实例化的那个类   应用程序/包创建[/ b]。

看起来我是对的,但我不太确定。你能证实/反驳吗?

5 个答案:

答案 0 :(得分:10)

首先调用Application构造函数。然后将调用Application :: onCreate()方法。我所知道的唯一例外是,如果Application包含ContentProvider,它可以在Application之前接收调用。

这是从这里开始的:http://developer.android.com/reference/android/app/Application.html#onCreate()

  

public void onCreate()

     

在API级别1中添加在应用程序启动时调用,之前   任何活动,服务或接收者对象(不包括内容)   提供者)已经创建。实现应该尽可能快   可能(例如使用状态的延迟初始化),因为   在这个功能上花费的时间直接影响到它的性能   在流程中启动第一个活动,服务或接收者。如果你   覆盖此方法,请务必调用super.onCreate()。

答案 1 :(得分:1)

是的,这是对的。您应该使用onCreate()的{​​{1}}方法完成所有初始应用配置。 此外,如果您使用sqllite,则可以在SQLiteOpenHelper的Application方法中进行迁移。 http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

答案 2 :(得分:0)

我还没有测试过,也许有一些更相关的选项,但是对于升级,以下看起来很有希望:SQLiteOpenHelper.onUpgrade( SQLiteDatabase db, int oldVersion, int newVersion )。 因此,您可以将更新例程挂起。只有在需要数据库升级时才会触发覆盖的方法。

答案 3 :(得分:0)

是。应用onCreate方法是进程启动时调用的第一个方法。你可以把你的代码放在那里没有任何问题。 这里是文档http://developer.android.com/reference/android/app/Application.html#onCreate()

  

在应用程序启动时,在创建任何活动,服务或接收方对象(不包括内容提供程序)之前调用。实现应尽可能快,因为在此功能中花费的时间直接影响启动第一个活动的性能......

要小心快速完成所有更改,并确保只调用一次“升级”方法。 还可以考虑将此方法放在AsyncTask中,如果可能的话。

答案 4 :(得分:-4)

没有它剂量......你有活动A(启动器活动)和B ...当你启动你的应用程序时...从onCreate()开始加载...并说你开始活动B,然后它启动B和它的onCreate方法被执行..但是现在如果你导航回A..it将调用onResume活动而不是onCreate ..