如前所述,我刚开始使用android开发,现在已经开始从活动到活动了。我想知道什么是存储数据的最佳方式,以便在需要时可以在各种活动中使用。
来自网络开发背景,我在想这有点像将数据存储在会话或cookie中。背景中存在的东西,可以在需要时访问。 (我知道你也可以使用数据库,但如果可能的话,我想避免使用这个特定的应用程序)
为了论证,我想要有一个员工对象的链表,这些列表在多个活动中是持久的。如果我在工作线程中创建了所述链表,那么该线程是否会在应用程序的生命周期内存在,从而允许数据在任何时候都可供UI线程使用?
由于
答案 0 :(得分:3)
您的内容应该可以通过ContentProviders访问,ContentProviders可以从Web或数据库中检索数据。应用程序中的所有活动和片段都可以在需要时从内容提供商处请求数据。
在您拥有员工列表的示例中,员工应该位于“Employees”数据库表中,并且您的提供者应该根据您放在一起的SQL查询返回包含响应的Cursor个对象。 / p>
有关数据库访问权限,请参阅SQLiteOpenHelper
对于内容提供商,请参阅ContentProviders
这不是一个容易理解的主题,需要学习很多东西,但是如果你通过它工作,它会极大地提高你的应用程序的质量。有关此主题,请参阅this link for a tutorial。
我也很乐意帮助解决任何问题。
答案 1 :(得分:2)
要存储数据,您可以使用SharedPreferences
进行小型数据存储,例如设置,大型关系信息的数据库甚至文件。在您的情况下,取决于数据大小。
但在我看来,你的问题更多的是关于如何从不同的活动中访问这些数据而不是存储它。
我建议您查看Application对象。只要应用程序存在,这通常是单体而非保留在内存中。因此,您可以从任何地方加载数据并检索它。如果你想从不同的线程访问,请记住,以防止并发问题,这将是它。
答案 2 :(得分:1)
正如您所看到的,您有几个选项,但正如您明确表示您希望在应用程序的生命周期内访问某些内容时,您应该参考Application类,文档说明
需要维护全局应用程序状态的人员的基类
您需要在清单中指定扩展Application的类的名称,然后在应用程序进程启动时进行实例化,并且只要您的应用程序处于活动状态,您就可以确定它就在那里。
您可以参考此处的文档
http://developer.android.com/reference/android/app/Application.html
例如,您需要创建一个扩展Application的类,例如: -
public class MyApplication extends Application {
...
}
编辑您的清单以包含引用上述类的标记: -
<application ... android:name="com.fullpat.to.MyApplication">
谢谢,
赖安
答案 3 :(得分:0)
共享偏好是常见的做法。虽然根据你的清单,它可能不是那么直接。如果你可以将它改编为StringSet而不是你的共享偏好,而没有对象的任何数据对流。
实际上,另一个想法是将您的列表作为应用程序的应用程序类的对象。您的应用程序中的活动可以访问应用程序类,它通常用于保存“全局变量”。
答案 4 :(得分:0)
我过去常常将数据作为Intent Extra
传递,但后来我在ReplicaIsland Rep的源代码中找到了一个很好的设计模式。
我们的想法是使用Class作为SystemRegistry,并将您的数据作为静态对象。
它看起来如下:
public class SystemRegistry {
public static LinkedList<Object> myList;
}
以及您的应用和活动的任何部分。你打电话
SystemRegistry.myList
答案 5 :(得分:0)
我认为,你可以使用SharedPreferences,它很简单。此外,您可以清除app close或其他内容的数据。
答案 6 :(得分:0)
对于仅保留对象列表的特定需求,您可以扩展应用程序类并在此处“存储”此列表。在其他情况下,在活动,内容提供商和sqlite数据库之间使用Extras似乎“更清洁”。
答案 7 :(得分:0)
在面向对象的开发视图中,我会说你想要的很简单:
在MainActivity上,在应用程序生命周期开始时启动的活动,您有LinkedList
public class MainActivity extends Application {
private LinkedList<employee> employees = new LinkedList<employee>();
public LinkedList getEmployees() {
return this.employees;
}
在你的第二项活动中:
public class SeconActivity extends Activity {
private MainActivity app;
private LinkedList<employee> emp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.app = (MainActivity) getApplication();
this.emp = app.getEmployees();
对于整个应用程序中的少量数据,您可以使用SharedPreferences类。