我有一个后台操作,我希望能够以两种模式运行:
UI模式,由用户启动,并在整个生命周期内为用户提供有关操作状态的精确反馈。
非UI模式,由AlarmManager
启动,并为用户提供生命周期结束时的操作摘要。
仅实现 UI模式的自然设计选择将是AsyncTask
,并且仅实现非UI模式的自然设计选择将是{{1 }}。
同时实现两种模式的自然设计选择是什么?即,将这两种模式合并为一个对象的自然设计选择是什么?
答案 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...)
。