在哪里插入应用程序启动代码?

时间:2012-07-21 16:49:09

标签: android

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

2 个答案:

答案 0 :(得分:30)

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

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

        // Do something here.
    }
}

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

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

修改

回应David Cesarino,我不同意Application课程的目的。如果你依赖于Activity的{​​{1}},那么阻止它成为同一大类的其他目的是什么......如果你需要在应用程序启动时发生某些事情,你必须写那段代码;并且onCreate可能会变得更加混乱,因为您还必须在其中执行Activity特定逻辑。如果你担心混乱,那么将逻辑分成其他类并从Activity调用它们。使用Application来确定逻辑是否应该执行似乎更像解决了已经解决的问题。

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

答案 1 :(得分:4)

首先,查看Activity lifecycle

回答你的问题,你可以将代码放在任何这些“启动”方法中,具体取决于你想要做什么,而且最重要的是你要触发它时。对于你的要求,onCreate是合理的地方。

  

我一直把它放在我第一次活动的创造上,很确定必须有一个更好的地方放这个。

那是为什么?任何代码都有一个条目点,对吗?在Android活动中,它恰好是onCreate(再次,请参阅上面的链接了解完整详情)。除了事件处理,它是对主要调用序列之外发生的事件的响应,你把东西放在onCreate

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

编辑:

这是对drumboog提出的建议的跟进,因为我的评论开始变得越来越复杂,只是“只是评论”。

就个人而言,我会避免扩展Application类,这是因为早期执行代码的唯一原因,更多的是优先级不合理的代码(版本化数据库)。 Application课程主要用作Activity之间持久状态的简单方法,而不是“做所有事情”的方式。简而言之,我觉得Application课程经常被滥用。

根据您的需要,您可以在Activity onCreate中完美地实现调用代码。 降低了复杂性,因为我看到人们填充Application,直到它变成了一大类杂项代码。这对于维护来说是一个禁忌,它有自己的逻辑问题。

此外,如果你真的想要另一个完全与UI无关的解决方案,你应该考虑实现一个Service(但我不认为这是必要的。)

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