Android newbee在这里,我有一些代码,我想运行时,我的Android应用程序第一次启动。它检查本地数据库的版本,如果当前版本过期,则下载新版本。我一直坚持把它放在我第一次活动的开始之前,很确定必须有一个更好的地方来放置它。任何地方的建议我可以把它放在启动时会调用一次的地方?在哪里插入应用程序启动代码?
回答
你可以写一个自定义的应用程序类(从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
类的目的。如果你依赖Activity
的onCreate
,那么应该怎样阻止它成为同样庞大的其他用途......如果你需要在应用程序启动时发生某些事情,那么你必须在某处编写代码。并且Activity
可能会变得更加混乱,因为您必须在其中执行Activity
特定逻辑。如果你担心混乱,那么将逻辑分成其他类并从Application
中调用它们。使用SharedPreferences
来确定逻辑是否应该执行看起来更像是解决已经解决的问题的解决方法。
Dianne Hackborn似乎指的是数据,而不是逻辑,我完全同意。静态变量比应用程序级别变量好得多...更好的范围界定和类型安全性使维护性/可读性更容易。
显然,'SharedPreferences'就是评论中无关问题的一个例子(它甚至不是答案的一部分)。我并不是说你需要将数据库版本(或其他)保存到'SharedPreferences'中,因为它已经在数据库本身中“保存”了(用于'onUpgrade',*例如*)。关于使用Application类来尽早执行数据库检查,让我们只是同意不同意。谢谢回复。 – davidcesarino 2012-07-21 18:51:57
我明白,我并不是故意专注于它的'SharedPreferences'方面,而是要求说: 'if(someCondition){0} { //执行某些事情。 }' 对我来说,这就是'应用程序'是为...创建的......我想这只是两种看待它的方式,正如你所说......同意不同意。 – 2012-07-21 19:13:39
别担心,没问题! :-) – davidcesarino 2012-07-21 19:19:04
首先,看看Activity lifecycle。
回答你的问题,你可以把任何的那些“启动”方法的代码,这取决于你想要的时候要触发,这样做,并且大多是重要的,什么。对于你所问的,onCreate
是合理的地方。
我一直坚持它在我的第一个活动的OnCreate,非常肯定必须有一个更好的地方来放这个。
为什么?任何代码都有条目点,对吧?在Android活动中,恰好是onCreate
(同样,请参阅上面的链接了解详细信息)。除了事件处理,这是响应主要调用序列外发生的事件的响应,您将东西放入onCreate
。
如果您担心方法变得巨大,那么这是另一个问题。我说,更好地提取你的代码。为了检查初步的东西,人们通常在开始应用的主要活动之前提供“加载”活动。
编辑:
这是一个后续行动drumboog什么建议,因为我的评论开始在复杂成长为“只是一个评论”。
就个人而言,我会避免扩展Application
类,这是为了提前执行代码的唯一原因,更重要的是,代码在优先级(版本控制数据库)中不是那么明智。 Application
类主要用作坚持状态的简单方法Activity
之间,而不是“做所有事情”的方式。总之,我觉得Application
类通常被滥用。
为了您的所需,您可以完美实现Activity
onCreate
中的呼叫代码。那降低复杂性,因为我看到人们塞满Application
,直到它成为一个庞大的杂项代码类目的。这对于维护来说是不可能的,因为它本身就存在逻辑问题。另外,如果你真的想要另一个解决方案,完全与UI分离,你应该考虑实施一个Service
而不是(但我不认为这是必要的)。
两个those concerns were previously addressed by Dianne Hackborn(或我从她的消息中得到的)。
即便如此,几乎总是有更好的方法来保持状态(静态等)。我已经计算了一次手指伸展“Application”类的次数。 – davidcesarino 2012-07-21 17:40:34
谢谢你会试试:) – tobylang 2012-07-21 18:03:53
不客气。随意问任何其他细节。 – davidcesarino 2012-07-21 18:05:09
- 1. 代码自动在Windows启动时启动Java应用程序
- 2. asp.net mvc应用程序启动代码
- 3. 代码在哪里执行在子进程中启动?
- 4. 我在哪里将启动代码放入Play Framework?
- 5. 我在哪里需要使用代码的应用程序
- 6. 在connect.js源代码中定义的应用程序在哪里?
- 7. jar程序的源代码在哪里?
- 8. 我可以在哪里获得应用程序源代码?
- 9. 在哪里存储C++应用程序的SQL代码?
- 10. 哪里把JavaScript代码放在RoR Web应用程序中?
- 11. 我在哪里可以找到android的应用程序代码?
- 12. 数据库代码在哪里/如何进入类/应用程序?
- 13. 我在哪里可以下载iLOCOi2移动应用程序源代码?
- 14. 我应该在哪里存储会话代码在Rails应用程序中?
- 15. 我应该在哪里将控制器代码放在angularjs应用程序中
- 16. 如何使用android代码将卡路里数据插入googlefit应用程序
- 17. 在密码输入后(使用Shinydashboard)启动Shiny应用程序
- 18. ASP.NET服务器启动代码在哪里去?
- 19. 在您的应用程序上启动Youtube频道Swift代码
- 20. 如何在应用程序启动时执行汇编代码
- 21. 如何在应用程序启动时执行代码
- 22. 当Android应用程序启动并存在时运行代码
- 23. 我在哪里可以插入这段代码?
- 24. 我在哪里插入查询和逻辑的PHP代码?
- 25. 我在哪里可以插入我的代码?
- 26. 创建一个闹钟,启动一个应用程序或在我的应用程序启动代码iphone
- 27. Sinatra:在启动或重新启动我的应用程序时执行代码
- 28. 我应该在哪里放AutoLayout代码?
- 29. 我应该在哪里放置代码?
- 30. django经理代码应该在哪里?
你为什么说应该有一个更好的地方来放置启动代码? OnCreate()应该做你想要的。 – Snailer 2012-07-21 16:55:28
做一个加载屏幕的活动,并添加你的版本检查代码。 – 2012-07-21 17:00:41
Snailer如果我将代码留在活动中,然后我需要暂停或重新创建活动,那么该代码会一遍又一遍地被调用。 – tobylang 2012-07-21 17:38:18