11

アプリにインテント サービスがあります。このサービスには、いくつかのファイルのアップロードという仕事があります。何か用事がある時だけ走る。

インターネットに接続していないなど、いくつかの条件が満たされた場合、サービスはアップロードされません。そのため、ブロードキャスト レシーバーに自身を登録して、インターネット接続の変更に関するメッセージを受信します。

問題は、アプリが何かを実行している場合でも、サービスがアプリで強制終了されることです。たとえば、次のようになります。

  1. アプリはインテントをサービスに送信しています
  2. サービスが何かのアップロードを開始しました。すべて問題ありません
  3. X% がアップロードされ、アプリが強制終了され、サービスが強制終了されました
  4. インターネット接続が変更されました - サービスが起動されました。

アプリが強制終了された後にサービスが起動された場合、アプリで強制終了されるのはなぜですか? アプリが強制終了されたときにサービスを強制終了するのを防ぐ方法はありますか?

私は手動でアプリを殺しています。私はアンドロイドが私のサービスをいつでも殺すことができることを知っています、そして私はそれを防ぎたくありません。ユーザーがアプリを閉じたり強制終了した後にこのサービスを実行したいだけです。

4

3 に答える 3

1

「やるべきことがある時だけ走る」理論的にのみ:) - 多分それはあなたが達成したいことです。

「問題は、アプリが何かを実行している場合でも、サービスがアプリで強制終了されることです。」 もちろん、ユーザーのアクションによって Service または Intent サービスが終了する場合があります。 これは失敗の答えです。

「アプリが強制終了されたときにサービスを強制終了しないようにする方法はありますか?」Googleで「ペアレンタルコントロール」「タスク保護」のキーワードで見守るだけ!

于 2013-10-24T10:13:38.890 に答える
1

アクティビティが破棄されるとintentServiceが破棄されることを意味するintentServiceを使用したため、intentServiceの代わりにサービスを使用する必要があるため、バックグラウンドでファイルをアップロードできます。

ブロードキャスト受信機を介したサービスとアクティビティ間の操作、またはサービスをアクティビティにバインドするため。

編集 :

Service は、任意のスレッドからトリガーできます。

IntentService は、メイン スレッドからトリガーする必要があります。

于 2013-10-24T10:11:16.093 に答える
0

通知を表示しても構わない場合 (たとえば、アップロードの進行状況を通知として表示できます)、IntentService (またはサービス) で次のように呼び出すことができます。

startForeground(int id, 通知通知)

これにより、アプリケーションが強制終了されたときにサービスが強制終了されるのを防ぐことができます。

ドキュメンテーションから: 「サービスがバックグラウンド ミュージックの再生を実行している場合など、サービスを強制終了するとユーザーが混乱する場合は、このフラグを設定して、音楽の再生が停止した場合にユーザーが気付くようにすることができます。」

于 2016-05-25T19:25:45.223 に答える