用于UI和非UI模式的后台操作的Android设计模式

时间:2014-08-06 09:05:01

标签: android android-asynctask android-intentservice

我有一个后台操作,我希望能够以两种模式运行:

  • UI模式,由用户启动,并在整个生命周期内为用户提供有关操作状态的精确反馈。

  • 非UI模式,由AlarmManager启动,并为用户提供生命周期结束时的操作摘要。

仅实现 UI模式的自然设计选择将是AsyncTask,并且仅实现非UI模式的自然设计选择将是{{1 }}。

同时实现两种模式的自然设计选择是什么?即,将这两种模式合并为一个对象的自然设计选择是什么?

2 个答案:

答案 0 :(得分:1)

我不会让对象通过不同的方式(UI /非UI)执行相同的操作,而是将业务逻辑移动到单独的类中,然后有两个不同的对象(AsyncTask和{{1} })在您需要时激活,并在其中使用该对象。此外,您计划在IntentService中运行什么样的任务?

答案 1 :(得分:0)

目前,我倾向于以下解决方案。不使用UI定义MyAsyncTask,使用UI定义MyUIAsyncTask extends MyAsyncTask;这实现了UI模式。定义MyService,其实例为MyAsyncTask(请参阅 [Is it possible to use AsyncTask in a Service class?);这实现了非UI模式。我不相信这是最好的解决方案,而且,它违反了以下threading rules

  
      
  • 必须在 UI主题上加载AsyncTask类。
  •   
  • 必须在 UI线程上创建任务实例。
  •   必须在 UI主题上调用
  • execute(Params...)
  •