Android newbee在这里,我有一些代码,我想在我的Android应用程序首次启动时运行。如果当前版本已过期,它会检查本地数据库的版本并下载新版本。我一直在坚持我的第一次活动,确定必须有一个更好的地方放这个。在某个地方的任何建议,我可以把它放在启动时被调用一次的地方吗?
答案 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
来确定逻辑是否应该执行似乎更像解决了已经解决的问题。
答案 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(或者我从她的消息中得到的)。