0

您好,我有如下意图启动服务

public void startAlarmService() {
    Intent i = new Intent();
    i.setAction("me.application.AlarmService");
    startService(i);
}

选中复选框时调用此方法。但是,当它被选中时,UI 会冻结 5 秒。

我尝试通过运行一个新线程来调用上述方法,然后使用 AsyncTask 但两者都不起作用,并且运行也需要 5 秒,因为例如我放置了一个进度对话框,并且 UI 在显示进度对话框之前冻结.

如何确保 UI 在启动此服务时不会冻结?

谢谢你的帮助。

编辑:服务代码:使用异步任务下载部分:

asyncDownload aCall = new asyncDownload(getApplicationContext(),this);              
boolean result = aCall.execute().get();
return result;
4

2 回答 2

1

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

于 2012-10-19T14:11:31.747 回答
0

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

于 2012-10-19T14:30:22.540 回答