2011-07-29 46 views
0

我目前正在使用解析器,并且每次调用onCreate时都会解析它。 我的解析器使用位于我的资产文件夹中的XML文件。仅在第一次启动时解析XML一次

是否有任何机会让我只能解析一次,而不是每次旋转屏幕或重新启动应用程序?

谢谢:)

回答

1

第一次完成解析时使用首选项系统存储标志,并在每次再次解析之前检查该标志。在你的OnCreate()方法中完成所有这些。

SharedPreferences settings = getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
    if (!settings.getBoolean("parsed", false)) { 
     parseTheXML(); 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("parsed", true); 
     editor.commit(); 
    } 

还有其他的方法,但这有一个跨应用程序重新加载/电话周期的工作 - 假设这就是你想要的。

+0

谢谢,这似乎工作得很好,我确实想让我的应用程序尽可能少用电池。 – Androider

2

这个问题有2个回答。最简单的一个第一:

如果你只希望这一次发生,在主要活动创建一个静态布尔并将其设置为true时,XML在被解析然后使用:

if(!isParsed) 
    XML.parse(); 

越这个问题的完整答案是确保您正确处理配置更改。

我建议你阅读this article关于如何实现配置更改处理。你应该能够通过实现这个解决这个“Android方式”问题。

希望这会有所帮助!

+0

但是他应该在离开活动之前永久保存'isParsed'的状态(例如'SharedPreferences'),并在每次应用程序启动时检查值。 – iDroid

+0

这听起来像他想要在每个应用程序生命周期中解析XML一次,而不是在应用程序的整个安装生命周期中一次。如果是这种情况,那么共享首选是一条路。 – Codeman

+0

我确实希望它只能解析一次安装的应用程序:) – Androider

1

您可以添加一个首选项。类似于 -

void setIsAppOpened() { 
    editor.putBoolean(APP_OPENED, true); 
    editor.commit(); 
} 

将它设置在您的onCreate()中。然后,添加以下代码以检查首选项是否存在。

if (!prefs.contains(APP_OPENED)) 
    { 
     //parse the XML 
     setIsAppOpened(); 
    }