我有一个后台操作,我希望能够以两种模式运行:
UI模式,由用户发起,在整个生命周期内为用户提供操作状态的精准反馈。
非 UI 模式,由其启动
AlarmManager
并向用户提供在其生命周期结束时的操作摘要。
只实现UI 模式的自然设计选择是AsyncTask
,只实现非 UI 模式的自然设计选择是IntentService
.
同时实现两种模式的自然设计选择是什么?即,将这两种模式合并到一个对象中的自然设计选择是什么?
我有一个后台操作,我希望能够以两种模式运行:
UI模式,由用户发起,在整个生命周期内为用户提供操作状态的精准反馈。
非 UI 模式,由其启动AlarmManager
并向用户提供在其生命周期结束时的操作摘要。
只实现UI 模式的自然设计选择是AsyncTask
,只实现非 UI 模式的自然设计选择是IntentService
.
同时实现两种模式的自然设计选择是什么?即,将这两种模式合并到一个对象中的自然设计选择是什么?
我不会让一个对象通过不同的方式(UI/非UI)做同样的事情,而是将业务逻辑移动到一个单独的类中,然后在你需要的时候激活两个不同的对象(AsyncTask
和IntentService
),并使用它内的对象。另外,您打算在您的AsyncTask
.
目前,我倾向于以下解决方案。MyAsyncTask
不带 UI 和带 UI定义MyUIAsyncTask extends MyAsyncTask
;这样就实现了 UI 模式。定义MyService
哪个有一个实例MyAsyncTask
(参见 [ Is it possible to use AsyncTask in a Service class?);实现非UI模式。我不相信这是最好的解决方案,而且它违反了以下线程规则:
- 该类
AsyncTask
必须在UI 线程上加载。- 任务实例必须在UI 线程上创建。
execute(Params...)
必须在UI 线程上调用。