1

假设我有一个我创建的对象。我们会调用它MyObject

我希望能够保存MyObject到数据库的相应表中。我不希望这发生在Activity的主线程上。很容易。我创建了一个AsyncTask来做到这一点。

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

显然,目的是模块化此代码,因此不需要重复。

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

我怀疑我会在 中创建一个saveMe()方法MyObject并将其声明为static. 从IntentService,我干脆叫saveMe()。从一个Activity,我将启动一个AsyncTask传入的MyObject然后调用saveMe()。听起来对吗?

4

2 回答 2

1

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

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

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

确切的模式取决于您正在处理的应用程序恕我直言。

于 2013-07-31T16:41:36.567 回答
0

当我处于有时想同步做某事,有时想异步做某事的情况下:

我倾向于IntentService使用公共静态方法来实现我想要的,通常称为blockingXwhere Xis what it does。这样,如果我想同步做,我直接调用方法。如果我想在后台线程上执行此操作,我会向服务发送一个意图。

于 2013-07-31T16:56:32.637 回答