我有一个由配置XML驱动的应用程序:各种各样的 通过解析XML和应用程序启动时加载应用程序属性 初始化某些类的静态变量。从中读取的数据 XML驱动应用程序的不同活动。现在,我有 称为“解析和属性初始化” onCreate()我的主要活动。
关于此案例/方法,我有几个问题:
我应该从应用程序调用应用程序初始化方法吗? 对象或当前的方法是否正确?有什么好处/ 如果我选择从中调用它,我们会得到/有什么缺点 申请对象?
我们真的需要一个静态类来存储应用属性吗?或者我们可以将所有属性作为应用程序对象中的静态Collection变量吗?
在app加载时解析XML(~200个节点)可能需要一些时间(不是 确定多久);我怎样才能避免可怕的ANR?我正在使用 拉解析器。
请帮我找到这些问题的答案。
谢谢。
答案 0 :(得分:10)
这取决于您正在初始化的内容。当您正在执行需要在应用程序的任何部分正常工作之前完成的事情时,应该使用应用程序onCreate()
,而只需要执行一次,而应使用Activity / Service / etc onCreate()
仅用于该组件所需的东西,需要多次完成。
我将所有初始化放入组件的主要问题是它将使以后更难以扩展您的应用程序。假设你想让你的应用程序中的一些Activity可以被外部意图访问 - 现在你必须将初始化代码移动到Application,或者你必须在非启动器Activity中复制初始化代码。
听起来你应该查看SharedPreferences,尤其是PreferenceManager.getDefaultSharedPreferences()。首选项将存储在会话之间,您可以从任何上下文轻松访问简单属性。
线程。我发现AsyncTask是完成此任务的最简单方法;有a good write-up on it at Google。或者,您可以启动服务以在后台执行此操作,同时拥有前台活动通知用户您正在启动应用程序。
答案 1 :(得分:4)
Application对象用于在整个应用程序中共享非持久性状态。我认为你根本不需要使用Application
课程。您可以使用首先调用的onCreate()
Activity
方法进行初始化。致quote the documentation:
子类是可选的;大多数应用程序不需要一个。在没有子类的情况下,Android使用基本Application类的实例。
您无需创建自己的类来存储应用程序属性。这是由SharedPreferences
为您完成的。
你还应该看看setDefaultValues()
method in the PreferenceManager
class,因为这将从XML文件中的数据设置首选项。这个方法的好处是使用readAgain
参数,这样只需要解析一次XML - 第一次启动应用程序 - 而不是每次都。