我从Android开始,想知道像DB读取和保存这样的后台任务是否总是封装在私有类中?
我的意思是,目前我有:
private class SaveToDB extends AsyncTask..
private class ReadFromDB extends AsyncTask..
public void onButtonClick(View v) {
new SaveToDB().execute();
}
等等。这样,如果我想执行后台任务,我总是要创建一个新对象。这是正确的方法吗?
我想知道的是,我所有的私有类本身都是“动作”,而不是真正的对象。因为它们被命名为例如保存或读取哪些命名通常适用于按惯例的方法,而不是类。
此外,如果我做得对:在MyApplication Activity中嵌入私有类是不错的做法?或者我应该将它们反映到自己独立的课程中?
答案 0 :(得分:1)
您可以编写服务来处理所有后台内容管理。因此,当您想要保存时,您只需向服务发送消息并告诉它写入数据。这要复杂得多。对于简单的事情,你可以像现在一样完成它。
编辑:
另外,正如Ian所指出的那样,看一下3.0之后的新数据库接口类。
答案 1 :(得分:0)
并非总是如此。
例如,如果您有一个将由不同活动使用的任务(我不是在谈论共享同一个实例),您将需要一个公共类,因此您不会多次编写它。
如果您只在一个地方使用该(任务类)任务,私有类可能有助于保持您的代码更清洁。
答案 2 :(得分:0)
DbSaver
而不是SaveToDb
,例如更易读。答案 3 :(得分:0)
从UI代码中松散地耦合数据库访问是一种很好的设计。避免每次都必须创建新对象的一种方法是使数据库访问类成为单例,并在需要进行事务时返回类的实例。
对于您的上一个问题,最好将数据库管理移动到自己的类中,以便可以跨多个活动访问它。如果你在私有类中完成所有操作,那么当你有一个需要数据库访问的新活动时会发生什么?
答案 4 :(得分:0)
如果您正在触发与sqlite数据库交互的异步任务,那么现在不是最好的方法,那么您应该检查游标加载器。
http://developer.android.com/guide/topics/fundamentals/loaders.html
http://developer.android.com/reference/android/content/CursorLoader.html
一旦你了解了它们,它们比启动异步任务要容易得多,事实上它们构建在异步任务之上,以解决您描述的一些问题,并且能够容忍配置更改。
我强烈建议远离AsyncTask(用于数据库访问),而是使用Loader API。
它在兼容包中向后移植,因此您可以在Honeycomb之前的旧版本中使用它们。