2009-12-21 113 views
12

我有一个由配置XML驱动的应用程序:各种 应用程序属性在应用程序启动时通过解析XML和初始化某些类的静态变量来加载。从此 XML中读取的数据驱动应用程序的不同活动。目前,我有 称为“解析和属性初始化”从我主要活动的onCreate() 。Android应用程序初始化

我至于这种情况下/方法几个问题:

  1. 我应该从应用程序 对象调用应用程序初始化方法或者是目前的做法是否正确?如果我选择从 应用程序对象调用它,我们会得到/有什么优势/缺点?

  2. 我们真的需要一个静态类来存储应用程序属性吗?或者我们可以将所有属性作为应用程序对象中的静态集合变量吗?

  3. 在应用程序加载时解析XML(约200个节点)可能需要一些时间(而不是 )。我怎样才能避免可怕的ANRs?我正在使用一个 Pull Parser。

请帮我看看这些问题的答案。

谢谢。

回答

4

Application对象用于跨应用程序共享非持久状态。我认为你根本不需要使用Application类。您可以在首先调用的ActivityonCreate()方法中进行初始化。至quote the documentation

该子类是可选的;大多数应用程序不需要一个。在没有子类的情况下,Android使用基类Application类的一个实例。

您不需要创建自己的类来存储应用程序属性。这由SharedPreferences为您完成。

您还应该查看setDefaultValues() method in the PreferenceManager 类,因为这将设置XML文件中数据的偏好。这种方法的好处在于,使用readAgain参数,以便XML仅解析一次 - 第一次启动应用程序时 - 而不是每次都解析。

10
  1. 这取决于你正在初始化什么。应用程序的onCreate()应该用于在应用程序的任何部分正常工作并且只需要执行一次之前需要完成的事情,而Activity/Service/etc的onCreate()应该用于该组件所需的事情独自一人,需要多次完成。

    我将所有初始化放到组件中的主要问题是,它会在以后增加您的应用程序的难度。假设你想让你的应用程序中的某些Activity可以被外部意图访问 - 现在你必须将初始化代码移动到Application上,或者你必须在非启动Activity中复制初始化代码。

  2. 听起来你应该检查出SharedPreferences,尤其是PreferenceManager.getDefaultSharedPreferences()。首选项将存储在会话之间,并使您可以轻松访问任何上下文中的简单属性。

  3. 螺纹加工。我发现AsyncTask是完成这个任务的最简单的方法;有a good write-up on it at Google。或者,您可以启动服务在后台执行此操作,同时拥有前台活动通知用户您正在启动应用程序。