0

アプリケーションでデータのアップロードとダウンロードを実行するために使用すべきサービスのタイプについて質問があります。

具体的には、バインドされたサービス (bindService() を呼び出すことによって取得される) が実際により適切であるように思われます。これは、私のバックグラウンド作業が無期限に実行されているわけではなく、それが実際に startService/START_STICKY を使用する目的であると理解しているためです。

とはいえ、私は長いアップロードとダウンロードを実行しており、アプリケーションの UI で何が起こっているか (バックグラウンドに送信されるなど) に関係なく、アップロード/ダウンロードの途中でサービスのガベージを収集したくありません。私が理解しているように、バインドされたサービスがある場合、すべての接続がバインド解除されるとすぐにガベージコレクションされます。これは、バインドされたサービスが実行中の途中で停止する可能性があることを意味しますか?

ここで誰かが私を正しい方向に向けることができますか? 前もって感謝します

4

2 に答える 2

0

Service呼び出してフォアグラウンドで実行すると、startForegroundサービスの強制終了やガベージ コレクションがユーザーにとって混乱を招くことをシステムに通知します。これにより、システム リソースが不足している、または電力が不足しているために絶対に必要な場合を除き、システムがサービスをクリーンアップするのを防ぐことができます。

Serviceフォアグラウンドで実行するには、Notification. それは次のように行うことができます:

Notification.Builder builder = new Notification.Builder(getApplicationContext());
builder.setSmallIcon(R.drawable.notification_icon);
builder.setContentTitle("Your notification text");
builder.setProgress(100, 0, true); /* 0 out of 100 progress to start */
builder.setAutoCancel(false);
builder.setOngoing(true);
Notification notification = builder.getNotification();

/* NOTIFICATION_ID can just be a static int to identify your service's notification */
startForeground(NOTIFICATION_ID, notification);

これは startForeground を使用するかなり基本的な例ですが、少なくとも正しい方向に向けられるはずです。操作が終了したら、 を呼び出して、自由に収集できることをシステムに知らせることができますstopForeground

于 2013-03-22T19:40:37.923 に答える