0

我从 Android 开始,想知道数据库读取和保存等后台任务是否总是封装在私有类中?

我的意思是,目前我有:

private class SaveToDB extends AsyncTask..
private class ReadFromDB extends AsyncTask..

public void onButtonClick(View v) {
 new SaveToDB().execute();
}

等等。这样,如果我想执行后台任务,我总是必须创建一个新对象。这是正确的方法吗?

我想知道的是,我所有的私有类本身都是“动作”,而不是真正的对象。因为它们被命名,例如 save 或 read,通常按照约定命名方法适用于方法,而不适用于类。

此外,如果我做得对:将私有类放在 MyApplication Activity 中是一种好习惯吗?还是我应该将它们重构为自己的单独类?

4

5 回答 5

1

您可以编写一个服务来处理所有后台内容管理。因此,当您想要保存时,您只需向服务发送消息并告诉它写入数据。这要复杂得多。对于简单的事情,您可以完全按照您当前的方式进行操作。

编辑:

另外,正如 Ian 所指出的,看看 3.0 之后的新数据库接口类。

于 2012-05-16T13:30:23.977 回答
0

不总是。

例如,如果您有一个任务将被不同的活动使用(我不是在谈论共享同一个实例),您将需要一个公共类,这样您就不会多次编写它。

如果您只在一个地方使用该(类)任务,私有类可能有助于保持您的代码更清洁。

于 2012-05-16T13:26:35.890 回答
0
  1. 这是使用 AsyncTask 的正确方法,您可以执行一次。
  2. 类名可以DbSaver代替SaveToDb例如更具可读性的类名。
  3. 如果该类仅用于一个活动,您可以嵌套它们,为什么不呢。但是,如果您有在不同活动中执行的任务,那么创建自己的文件是个好主意。
于 2012-05-16T13:29:22.447 回答
0

将数据库访问与 UI 代码松散耦合是一个很好的设计。避免每次都必须创建新对象的一种方法是使数据库访问类成为单例,并在需要进行事务时仅返回该类的实例。

对于您的最后一个问题,最好将数据库管理移至其自己的类,以便可以跨多个活动访问它。如果您在私有类中完成所有操作,那么当您有一个需要访问数据库的新活动时会发生什么?

于 2012-05-16T13:29:27.467 回答
0

如果您正在触发异步任务以与 sqlite 数据库进行交互,那么这不是当今做事的最佳方式,您应该检查游标加载器。

http://developer.android.com/guide/topics/fundamentals/loaders.html

http://developer.android.com/reference/android/content/CursorLoader.html

一旦你对它们有所了解,它们比启动异步任务要容易得多,事实上它们建立在异步任务之上,以解决你描述的一些问题,并且可以容忍配置更改。

我强烈建议不要使用 AsyncTask(用于数据库访问)并改用 Loader API。

它在兼容性包中向后移植,因此您可以在 Honeycomb 之前的旧版本中使用它们。

于 2012-05-16T13:34:11.193 回答