有没有一种方法可以模块化代码,同时能够异步运行和在主线程上运行



假设我创建了一个对象。我们称之为MyObject

我希望能够将MyObject保存到数据库的相应表中。我不希望这种情况发生在Activity的主线程上。很简单。为此,我创建了一个AsyncTask

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

很明显,目的是将这些代码模块化,这样就不需要重复了。

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

我怀疑我将在MyObject中创建一个saveMe()方法,并将其声明为static。从IntentService,我简单地调用saveMe()。从Activity,我将启动一个AsyncTask,它通过MyObject,然后调用saveMe()。听起来对吗?

除了static听起来不错之外,您不想访问实例变量吗?

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

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

确切的模式取决于您正在处理的应用程序imho。

当我有时想同步有时异步地做某事时:

我倾向于用一个公共静态方法实现IntentService来做我想做的事情,通常称为blockingX,其中X就是它所做的。这样,如果我想同步执行,我会直接调用该方法。如果我想在后台线程上执行,我会向服务发送一个意向。

最新更新