Android:当intent调用服务时,UI会冻结

时间:2012-10-19 13:48:27

标签: android

您好我的意图如下:启动服务

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;

2 个答案:

答案 0 :(得分:1)

默认情况下,服务在与同一应用程序的活动相同的线程上运行,即UI线程 因此,在新线程中运行服务看起来是一个很好的解决方案。

答案 1 :(得分:0)

您首先创建一个AsyncTask,然后使用它的get()方法来阻止主线程。正确执行 - 后台工作在doInBackground(Params...),然后更新onPostExecute(Result)中的UI,再次在主线程中调用 - 而不是使用get()