我正在准备我的某个应用程序的新版本,并且我在我的应用程序中进行了如此大的更改,我需要在更新应用程序后完全做一些数据转换,这绝对是第一件事(在做其他任何事情之前)。我想,最好的地方就是在我的类(扩展Application)中的onCreate()方法。我测试了几次,它似乎工作正常,但后来我读了文档:
需要维护全局应用程序状态的基类。 您可以通过在其中指定其名称来提供自己的实现 您的AndroidManifest.xml标签,[b]将导致 当你的过程为你实例化的那个类 应用程序/包创建[/ b]。
看起来我是对的,但我不太确定。你能证实/反驳吗?
答案 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 ..