2013-07-31 35 views
1

假设我有一个我创建的对象。我们将其称为MyObject。我想将MyObject保存到数据库的相应表中。我不希望这发生在Activity的主线程上。很简单。我创建了一个AsyncTask来做到这一点。有没有办法模块化代码,使其能够异步运行并在主线程上运行?

但是,我的应用程序也有一个IntentService用于在设备的数据库和我的云数据库之间同步数据。我想从这里保存从云端同步到设备数据库的MyObject。不过,我不希望在IntentService中异步发生这种情况。我希望它发生在IntentService的主线上。

显然,它的目的是模块化这段代码,所以它不需要被复制。

如何模块化我的保存代码,以便它可以异步同步调用?

我怀疑我会在MyObject内部创建一个saveMe()方法并声明它为static。从IntentService,我只需拨打saveMe()。从Activity,我将启动一个AsyncTask,通过MyObject,然后调用saveMe()。这听起来是对的吗?

+0

这是正确的,但你为什么认为'saveMe()'需要是静态的? – Geobits

回答

1

除了我听起来不错的static,你不想访问实例变量吗?

我不知道你的应用程序如何设计一般,但我可能会去以下模式之一:

  • Runnable(或Callable一个子类,如果你需要返回值和/或例外情况),通常使用合适的工厂或构造函数来处理保存。然后,您可以直接或在后台线程上运行这些任务。
  • 对象的实例有自己保存的方法(这就是你所描述的),并且这些方法被同步或异步代码使用。数据库/存储类的
  • 实例有一种方法,以节省MyObject实例,假设它们具有共同的父类,你可以把该代码,并且这些方法通过同步或异步代码中使用。

确切模式取决于你在工作恕我直言应用。

0

当我在一个情况下,我有时候想同步和非同步有时会做一些事情:

我倾向于实行与公共静态方法的IntentService做什么我想通常被称为blockingX其中X是什么它确实如此。这样,如果我想同步执行,则直接调用该方法。如果我想在后台线程上执行此操作,我会向该服务发送一个意向。

相关问题