我有一个包含异步任务的服务类。在doInBackground和onPostExecute中,我调用服务类中但在异步任务之外的一些方法。当调用这些方法时,它们仍然位于Async任务创建的线程中,因此不会干扰主UI。
为了说明我缺乏理解,我应该尝试将服务类所做的几乎所有内容都放入Async任务中。例如,服务作为警报的结果启动,并且在onStartCommand中设置重复警报(这是Reto Meire的地震示例)并创建数据库。将这两个操作的代码移动到Async任务的onPreExecute部分是否有意义?
答案 0 :(得分:0)
无需这样做..请确保您要在后台运行的方法是从doInBavkground()
调用的..其余的你可以放入postExecute
....你的代码片段想要在backGround任务应该在PostExecute()
之后运行。如果您从doInBackground()
调用方法,它们仍然在后台线程上运行..无论它们在哪里...如果您从onPostExecute()
调用它,那么它将在其他线程上运行,其中可以进行更改在你的显示器中...就像显示对话框等...
答案 1 :(得分:0)
您应该始终将尽可能多的工作卸载到后台线程/任务。应该在doInBackground
方法中完成数据库创建之类的操作。 onPreExecute
和onPostExecute
方法在UI线程上运行,通常用于通知用户后台活动(例如使用ProgressDialog
)。
根据经验,我建议不使用后台服务,如果你可以逃脱它。如果您使用一个,您应该知道如何正确清理它,因为用户通常会对在后台运行的应用程序感到恼火。