有没有办法模块化代码能够异步和在主线程上运行?

时间:2013-07-31 16:25:18

标签: android android-asynctask

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

我希望能够将MyObject保存到数据库的相应表中。我不希望这发生在Activity的主线程上。很容易。我创建了AsyncTask来执行此操作。

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

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

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

我怀疑我会在saveMe()内创建一个MyObject方法并将其声明为static。从IntentService开始,我只需致电saveMe()。从Activity开始,我将发送一个AsyncTask,其中传递MyObject,然后调用saveMe()。听起来不错吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

当我处于某种情况下,我有时想要同步做某事,有时甚至是asynch:

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