2010-11-17 28 views
6

我在Android/Java编程方面相当新,所以一些基本的东西仍然很混乱。因此,假设我的应用程序从外部XML文件中获取所需的所有数据(文章),它将它们解析为数据模型(文章类),并且这些文章将被用于整个应用程序中(用列表或单个文章显示)生命周期。我应该在哪里全局保存/缓存所有应用程序生命周期所需的数据?

我应该在哪里?我可以使用包含我已解析的所有文章的数组创建单例类吗?还是应该将它们保存到数据库,然后根据需要进行查询? (这听起来像太多的工作,我不需要现在缓存它们)这里最好的做法是什么?

回答

2

将它们保存在Application中。这是任何Android应用程序的基类,它在应用程序的整个生命周期中都处于活动状态,而活动在未显示或方向改变时被终止。

您的AndroidManifest.xml中声明android:name

<application android:name=".YourApplication"/> 

编辑:

这也是相关的:How do I pass data between Activities/Services within a single application?

+0

这不会让主类变得混乱吗?特别是,如果我将更多的数据(数组)和专用于管理(添加,更改,搜索)数据的方法。 – sniurkst 2010-11-17 09:49:30

+0

这是您的设计决定。我只是说可以从所有活动访问应用程序,并且是存储与应用程序生命周期(而非活动生命周期)相关的共享数据的正确位置。 – 2010-11-17 09:52:17

+0

您可以将数据直接放入应用程序中,或者将其放入专门的类中并在应用程序中引用它。 – 2010-11-17 09:53:27

1

那要看什么是您的编程风格笑。

你可以像你说的那样创建一个会读取你的xml并存储所有东西的单例。

你可以在你的类中创建一个静态哈希。这样当你创建一个新的对象时,你将有权访问该类的静态信息。

您可以将类的信息作为参数传递给类。

如果你想让我们告诉你哪一个是最好的,如果不知道你的程序的体系结构将会很困难。

例如,您可以有一个视图控制器来处理任何更改,然后在切换视图时将该数据存储在该级别可以很简单。

你可以有静态视图,你可以直接设置所有的值,当你打开它们。

你可能会losely链接相互调用的观点没有任何控制器来处理交换和在这种情况下,你可能会喜欢有一个方法来收集你从一个单身或静态方法所需要的信息...

+0

那么,理想情况下,我想有一个类:所有活动都可以访问,存储一个对象数组,并且能够管理该数组(添加更多对象,通过数组中的位置或某种类型获取对象如果这让我的问题更清楚。 – sniurkst 2010-11-17 09:47:37

0

只要确保没有任何线程作用于共享数据,您就可以使用静态成员创建一个静态类。每个活动都可以访问它。如果为数据使用异步下载,则可以在处理程序的onPostExecute中触摸GlobeVars,因为它在UI线程上运行。

public class GlobalVars { 
    public static String userId = "?"; 
    //public static String serverUrl = "10.0.2.2"; //localhost when developing 
    public static String serverUrl = "192.168.1.4"; //on device to laptop 
    //public static String serverUrl = "102.192.293.10"; //production 
    public static Book currentBook = null; 
    public static Chapter currentChapter = null; 
    public static int lastclickedChapter = -1; 
    public static Voice currentVoice = null; 
    public static String catalogJson = ""; 
    public static ArrayList<Book> catalogItems = null; 
} 

MainActivity中的onCreate我可以将目录设置为coverted对象XML的我的下载列表

GlobeVars.catalogItems = downloaded xml to object list 
在我的子活动

这是章节列表中onclicklistener我可以设置:

GlobeVars.currentChapter = items[clickeditem]; 

当您返回到主要活动时,值仍将被设置。

相关问题