2012-07-21 60 views
13

Android newbee在这里,我有一些代码,我想运行时,我的Android应用程序第一次启动。它检查本地数据库的版本,如果当前版本过期,则下载新版本。我一直坚持把它放在我第一次活动的开始之前,很确定必须有一个更好的地方来放置它。任何地方的建议我可以把它放在启动时会调用一次的地方?在哪里插入应用程序启动代码?

+0

你为什么说应该有一个更好的地方来放置启动代码? OnCreate()应该做你想要的。 – Snailer 2012-07-21 16:55:28

+0

做一个加载屏幕的活动,并添加你的版本检查代码。 – 2012-07-21 17:00:41

+1

Snailer如果我将代码留在活动中,然后我需要暂停或重新创建活动,那么该代码会一遍又一遍地被调用。 – tobylang 2012-07-21 17:38:18

回答

23

你可以写一个自定义的应用程序类(从android.app.Application扩展)。覆盖onCreate指定当应用程序启动时会发生什么:

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     // Do something here. 
    } 
} 

然后,您需要在清单文件中注册您的自定义类:

<application ... android:name="fully.qualified.MyApplication"> 

编辑:

在回应大卫Cesarino,我不同意Application类的目的。如果你依赖ActivityonCreate,那么应该怎样阻止它成为同样庞大的其他用途......如果你需要在应用程序启动时发生某些事情,那么你必须在某处编写代码。并且Activity可能会变得更加混乱,因为您必须在其中执行Activity特定逻辑。如果你担心混乱,那么将逻辑分成其他类并从Application中调用它们。使用SharedPreferences来确定逻辑是否应该执行看起来更像是解决已经解决的问题的解决方法。

Dianne Hackborn似乎指的是数据,而不是逻辑,我完全同意。静态变量比应用程序级别变量好得多...更好的范围界定和类型安全性使维护性/可读性更容易。

+0

显然,'SharedPreferences'就是评论中无关问题的一个例子(它甚至不是答案的一部分)。我并不是说你需要将数据库版本(或其他)保存到'SharedPreferences'中,因为它已经在数据库本身中“保存”了(用于'onUpgrade',*例如*)。关于使用Application类来尽早执行数据库检查,让我们只是同意不同意。谢谢回复。 – davidcesarino 2012-07-21 18:51:57

+0

我明白,我并不是故意专注于它的'SharedPreferences'方面,而是要求说: 'if(someCondition){0} { //执行某些事情。 }' 对我来说,这就是'应用程序'是为...创建的......我想这只是两种看待它的方式,正如你所说......同意不同意。 – 2012-07-21 19:13:39

+0

别担心,没问题! :-) – davidcesarino 2012-07-21 19:19:04

3

首先,看看Activity lifecycle

回答你的问题,你可以把任何的那些“启动”方法的代码,这取决于你想要的时候要触发,这样做,并且大多是重要的,什么。对于你所问的,onCreate是合理的地方。

我一直坚持它在我的第一个活动的OnCreate,非常肯定必须有一个更好的地方来放这个。

为什么?任何代码都有条目点,对吧?在Android活动中,恰好是onCreate(同样,请参阅上面的链接了解详细信息)。除了事件处理,这是响应主要调用序列外发生的事件的响应,您将东西放入onCreate

如果您担心方法变得巨大,那么这是另一个问题。我说,更好地提取你的代码。为了检查初步的东西,人们通常在开始应用的主要活动之前提供“加载”活动。

编辑:

这是一个后续行动drumboog什么建议,因为我的评论开始在复杂成长为“只是一个评论”。

就个人而言,我会避免扩展Application类,这是为了提前执行代码的唯一原因,更重要的是,代码在优先级(版本控制数据库)中不是那么明智。 Application类主要用作坚持状态的简单方法Activity之间,而不是“做所有事情”的方式。总之,我觉得Application类通常被滥用。

为了您的所需,您可以完美实现ActivityonCreate中的呼叫代码。那降低复杂性,因为我看到人们塞满Application,直到它成为一个庞大的杂项代码类目的。这对于维护来说是不可能的,因为它本身就存在逻辑问题。另外,如果你真的想要另一个解决方案,完全与UI分离,你应该考虑实施一个Service而不是(但我不认为这是必要的)。

两个those concerns were previously addressed by Dianne Hackborn(或我从她的消息中得到的)。

+0

即便如此,几乎总是有更好的方法来保持状态(静态等)。我已经计算了一次手指伸展“Application”类的次数。 – davidcesarino 2012-07-21 17:40:34

+0

谢谢你会试试:) – tobylang 2012-07-21 18:03:53

+0

不客气。随意问任何其他细节。 – davidcesarino 2012-07-21 18:05:09

相关问题