假设我有一个我创建的对象。我们称之为MyObject
。
我希望能够将MyObject
保存到数据库的相应表中。我不希望这发生在Activity
的主线程上。很容易。我创建了AsyncTask
来执行此操作。
但是,我的应用程序还有IntentService
用于在设备的数据库和我的云数据库之间同步数据。我想将从云端同步的MyObject
保存到设备的数据库中。但是,我不希望在IntentService
中异步发生这种情况。我希望它发生在IntentService
的主线上。
显然,目的是模块化这段代码,因此不需要重复。
如何模块化我的保存代码,以便可以异步和同步调用它?
我怀疑我会在saveMe()
内创建一个MyObject
方法并将其声明为static
。从IntentService
开始,我只需致电saveMe()
。从Activity
开始,我将发送一个AsyncTask
,其中传递MyObject
,然后调用saveMe()
。听起来不错吗?
答案 0 :(得分:1)
除了对我来说听起来不错的static
之外,你不想访问实例变量吗?
我不知道你的应用程序是如何设计的,但我可能会选择以下模式之一:
Runnable
(或Callable
的子类,如果需要返回值和/或异常),通常使用合适的工厂或构造函数来处理保存。然后,您可以直接或在后台线程上运行这些任务。MyObject
实例的方法,假设它们有一个公共父类,您可以放置该代码,这些方法由同步或异步代码使用。确切的模式取决于您正在使用的应用程序。
答案 1 :(得分:0)
当我处于某种情况下,我有时想要同步做某事,有时甚至是asynch:
我倾向于使用公共静态方法实现IntentService
来执行我想要的通常称为blockingX
的方法,其中X
就是它的作用。这样,如果我想同步执行,我直接调用该方法。如果我想在后台线程上执行此操作,我会向服务发送一个意图。