android - 有没有一种方法可以将代码模块化,使其能够异步运行并在主线程上运行?

标签 android android-asynctask

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

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

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

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

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

我想我会在 MyObject 中创建一个 saveMe() 方法并将其声明为 static。在 IntentService 中,我只需调用 saveMe()。在 Activity 中,我将启动一个 AsyncTask,它传入 MyObject,然后调用 saveMe()。听起来对吗?

最佳答案

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

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

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

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

关于android - 有没有一种方法可以将代码模块化,使其能够异步运行并在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975831/

相关文章:

java - Android中使用特殊字符验证手机号码

android - 为什么即使初始化了Lateinit属性,我仍会得到kotlin.UninitializedPropertyAccessException(可能)

java - Android AsyncTask #2 调用 detach()

android - 在 AsyncTask 中覆盖 onPostExecute()

java - Android AsyncTask-to-Activity 回调 nullPointerException

java - android 进度条无法正确更新进度(onPostExecute() 运行较晚)

java - 如何设置另一个类的监听器?

java - 我如何在 Android ImageView 中显示 PDF 文件

android - Ekito 简单 KML 阅读源

Android AsyncTask publishProgress 不调用 onProgressUpdate