Android应用程序初始化

Sam*_*muh 13 android

我有一个由配置XML驱动的应用程序:通过解析XML并初始化某些类的静态变量,在应用程序启动时加载各种应用程序属性.从此XML读取的数据驱动应用程序的不同活动.目前,我已经从我的主要活动的onCreate()调用了"解析和属性初始化".

关于此案例/方法,我有几个问题:

  1. 我应该从Application Object调用app初始化方法还是当前的方法是正确的?如果我选择从Application对象调用它,我们会得到/有什么优点/缺点?

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

  3. 在app加载时解析XML(~200个节点)可能需要一些时间(不知道多久); 我怎样才能避免可怕的ANR?我正在使用Pull Parser.

请帮我找到这些问题的答案.

谢谢.

Dan*_*Lew 10

  1. 这取决于你正在初始化什么.应用程序的onCreate()时候,你正在做的事情,需要做之前,你的应用程序的任何部分工作正常,只需要完成一次,而活动/服务/等的,应使用onCreate()应该用于那些单独需要该组件的东西,需要多次完成.

    我将所有初始化放入组件的主要问题是它将使以后的应用程序扩展更加困难.假设你想让你的应用程序中的一些Activity可以被外部意图访问 - 现在你必须将初始化代码移动到Application,或者你必须在非启动器Activity中复制初始化代码.

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

  3. 线程.我发现AsyncTask是完成此任务的最简单方法; Google上一篇很好的文章.或者,您可以启动服务以在后台执行此操作,同时具有前台活动通知用户您正在启动应用程序.


Dav*_*ebb 4

Application对象用于跨应用程序共享非持久状态。Application我认为您根本不需要使用课程。onCreate()您可以在首先调用的方法中进行初始化Activity。引用文档

子类是可选的;大多数应用程序不需要它。如果没有子类,Android 将使用 Application 基类的实例。

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

您还应该查看类setDefaultValues()中的方法PreferenceManager ,因为这将从 XML 文件中的数据设置首选项。此方法的优点在于使用readAgain参数,以便 XML 仅解析一次(第一次启动应用程序时),而不是每次都解析。