0

こんにちは私はサービスを開始する以下のような意図を持っています

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

このメソッドは、チェックボックスがオンになっているときに呼び出されます。ただし、チェックされると、UIが5秒ほどフリーズします。

新しいスレッドを実行してからAsyncTaskを使用して上記のメソッドを呼び出そうとしましたが、どちらも機能せず、たとえば進行状況ダイアログを配置し、進行状況ダイアログを表示する前にUIがフリーズしたため、実行に5秒ほどかかりました。 。

このサービスの開始時に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 に答える