假设我创建了一个对象。我们称之为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
就是它所做的。这样,如果我想同步执行,我会直接调用该方法。如果我想在后台线程上执行,我会向服务发送一个意向。