【发布时间】:2014-07-08 08:16:16
【问题描述】:
我正在开发一个显示对象列表的 Android 应用。对于显示的每个对象,我使用存储在字符串成员中的信息填充几个文本视图。
信息存储在单独的 xml 文件中,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<string-array name="Object_Name">
<!-- Atribute 1 -->
<item ></item>
<!-- Atribute 2 -->
<item ></item>
<!-- Atribute 3 -->
<item ></item>
<!-- Atribute 4 -->
<item ></item>
<!-- Atribute 5 -->
<item ></item>
<!-- Atribute 6 -->
<item ></item>
<!-- Atribute 7 -->
<item ></item>
<!-- Atribute 8 -->
<item ></item>
<!-- Atribute 9 -->
<item ></item>
</string-array>
</resources>
我已经想到了两种方法来处理我的应用中的这些信息:
当应用程序启动时,我会创建一个对象列表,并为我在 xml 文件中定义的每个
</string-array>创建一个对象列表。我将来自<item>的字符串存储在对象成员中。大约有 250 个这样的对象,其中一些属性包含大字符串(1000 个字符或更多)。每次需要填充文本视图时,我都会使用 getter 方法从对象中读取字符串。当应用程序启动时,我会创建一个对象列表,并为我在 xml 文件中定义的每个
</string-array>创建一个对象列表。我存储</string-array>的资源ID,但不读取任何属性。每次需要填充文本视图时,我都会从与对象关联的 xml 中读取属性并返回字符串。
第一种方法会影响应用程序启动,因为它需要一些时间来使用数组中的信息填充对象列表,但一旦创建列表就具有速度优势。此外,所有这些字符串可能需要相当多的内存,而内存是智能手机上的宝贵资源。
第二种方法将减少应用启动并为对象列表使用更少的内存,因为只存储资源 ID。我看到的缺点是每次创建和填充文本视图时,都会从 xml 文件中读取内容。我认为从存储介质中读取会花费更长的时间,并且可能会让用户觉得应用程序迟钝。
我对这两种方法的分析是否正确?
你认为我应该使用哪种方法,为什么?
是否有一些工具可以用来测量运行时间和内存使用情况?
【问题讨论】:
-
因为您有很多数据要显示并且您将所有数据存储在单独的 xml 文件中。这不是存储静态字符串的正确方法。您可以使用 SQLite 数据库来存储这么多数据。在使用数据库的同时,您也可以非常流畅地访问数据,并且加载所有数据所花费的时间非常少。
-
您的意思是将数据存储到 SQLite 数据库而不是 xml 中,或者在启动时从 xml 填充数据库?在我将数据库包含到我的应用程序之前,是否有任何工具可以离线填充数据库?
-
查看我添加的答案
标签: android xml string performance