Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 后台方法始终作为私有类?_Java_Android - Fatal编程技术网

Java 后台方法始终作为私有类?

Java 后台方法始终作为私有类?,java,android,Java,Android,我从Android开始,想知道像DB读取和保存这样的后台任务是否总是封装在私有类中 我是说,目前我有: private class SaveToDB extends AsyncTask.. private class ReadFromDB extends AsyncTask.. public void onButtonClick(View v) { new SaveToDB().execute(); } 等等。这样,如果我想执行后台任务,我总是必须创建一个新对象。这是正确的方法吗 我想知道

我从Android开始,想知道像DB读取和保存这样的后台任务是否总是封装在私有类中

我是说,目前我有:

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

public void onButtonClick(View v) {
 new SaveToDB().execute();
}
等等。这样,如果我想执行后台任务,我总是必须创建一个新对象。这是正确的方法吗

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

此外,如果我做得对的话:在我的应用程序活动中整理私有类是一种好的做法吗?或者我应该把它们重构成自己单独的类吗?

不一定

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

若您只在一个地方使用该(类)任务,那个么私有类可能有助于保持代码的整洁

  • 这是使用AsyncTask的正确方法,因为可以执行一次
  • 类名可以是
    DbSaver
    isntead的
    SaveToDb
    ,例如,它更具可读性
  • 如果该类只用于一个活动,那么您可以嵌套它们,为什么不呢。但如果您有在不同活动中执行的任务,最好创建自己的文件

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


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

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

    编辑:


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

    如果您正在启动异步任务来与sqlite数据库交互,那么这并不是现在做事情的最佳方式,您应该查看游标加载程序

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

    我强烈建议不要使用AsyncTask(用于db访问),而是使用Loader API


    它的后端口在兼容包中,因此您可以在蜂窝之前的旧版本中使用它们。

    不幸的是,您不能使用
    AsyncTask
    来实现这一点。
    AsyncTask
    的每个实例只能运行一次。每次都需要创建一个新的。