Android中保存长文本的最佳实践

5
我想了解是否一直将String值存储在strings.xml文件中是最佳实践,即使这些字符串非常大。更具体地说,我有一个游戏,在游戏规则中显示。所有字符的总和超过700个字符。目前,我将这些长字符串分成较小的字符串(分段)。所以我想知道,将包含超过700个字符的长字符串视为良好实践吗?我知道必须考虑HEAP大小可以寻址多少字符,但我怀疑您是否可以轻松地达到限制。根据我的阅读Java将限制设置为(2 ^ 31-1)个字符,并在Android上设置为4-64百万个字符之间

你有多频繁地访问这些大字符串? - Yash
当用户在主菜单中点击游戏规则时。我猜这种情况不会经常发生。 - Jernej K
应该使用strings.xml。请查看下面的答案以获取解释。 - Yash
2个回答

4
我认为在xml中存储字符串没有上限,所以将字符串存储在那里是最方便的。如果真的想采用不同的机制,可以选择数据库或文件。但是,与从xml文件读取相比,从数据库和文件读取需要更长的时间,并且需要更多的代码才能实现相同的功能。
编辑:
我刚注意到您提到的字符串是游戏规则。因此,我强烈建议使用strings.xml,因为Android使用该XML将您的应用程序翻译成不同的语言。
来自本地化的官方指南:
将所有字符串移动到strings.xml中。在构建应用程序时,请记住不要硬编码任何字符串。相反,在默认的strings.xml文件中声明所有字符串作为资源,这使得更新和本地化变得容易。字符串在strings.xml文件中可以被提取、翻译并集成回您的应用程序(具有适当的限定符),而不需要对已编译的代码进行任何更改。

-1

不要把所有的长字符串都保存在 strings.xml 中,可以使用文本文件,并在需要显示规则文本时读取该文件。

您的布局文件将类似于以下内容:

<ScrollView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:layout_weight="1.0">
<TextView 
    android:id="@+id/subtitletv"
    android:textSize="18dp"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
/>

而且代码会是这样的:

subtitletv = (TextView)findViewById("R.id.helptext");
try {
        FileReader fr=new FileReader(selectedfile);
        BufferedReader br=new BufferedReader(fr);
        String line = null;
        try {
            while((line = br.readLine()) != null)
                 {
                      subtitletv.append(line);
                      subtitletv.append("/n");
                 }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这将很容易维护和访问。如有必要,请进行必要的修改。


但这是最佳实践吗?您是否总是建议使用文件而不是资源文件? - Jernej K
根据“Yashasvi”的评论,这将需要更多的时间...不知道这一点...无论如何还是谢谢!! - DsD
请注意,时间消耗绝对微不足道。 - Fattie
我意识到这有点过时,但我认为翻译部分很重要需要注意。Strings.xml 是用于翻译的,而不是使用文件。使用单独的文件没有任何好处,实际上还增加了额外的负担,只是感觉上似乎是正确的做法,因为你有很多文本。最终,strings.xml 只是一个文件,就像写入单独的文件一样,但 strings.xml 的阅读和翻译要容易得多。 :) - greysqrl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接