您好我的意图如下:启动服务
public void startAlarmService() {
Intent i = new Intent();
i.setAction("me.application.AlarmService");
startService(i);
}
选中复选框时会调用此方法。但是,当它被检查时,UI会冻结5秒钟。
我尝试通过运行一个新的Thread来调用上面的方法,然后使用AsyncTask但两个都没有工作,并且还花了5秒钟来运行,因为例如我放了一个进度对话框并且UI在显示之前冻结了进度对话框。
如何确保UI在启动此服务时不会冻结?
谢谢你的帮助。
编辑:服务代码:使用异步任务下载部件:
asyncDownload aCall = new asyncDownload(getApplicationContext(),this);
boolean result = aCall.execute().get();
return result;
答案 0 :(得分:1)
默认情况下,服务在与同一应用程序的活动相同的线程上运行,即UI线程 因此,在新线程中运行服务看起来是一个很好的解决方案。
答案 1 :(得分:0)
您首先创建一个AsyncTask
,然后使用它的get()
方法来阻止主线程。正确执行 - 后台工作在doInBackground(Params...)
,然后更新onPostExecute(Result)
中的UI,再次在主线程中调用 - 而不是使用get()
。