21

パスワードを持っている人が私のUI画面からサービスを停止するまで、私のサービスを実行し続けることが非常に重要です。私のアプリはうまく動作しますが、子供用の電話で保護者が(パスワードを使用して)オン/オフするように設計されています。私はなんとかすべてを機能させることができましたが、私が抱えている問題は、子供がタスクマネージャーを使用して私のサービスを強制終了した場合、私のアプリは役に立たないということです。どちらかへの道を知っている人なら誰にでも感謝します

1)サービスを監視し、サービスが「強制終了」された場合は自動的にバックアップを開始します。または2)サービスを起動したアクティビティ(管理画面)以外で誰かがサービスを強制終了できないようにします。または両方?

問題の説明がよくわからない場合は申し訳ありませんが、私は初心者です。私はこれまで大きな進歩を遂げましたが、この最後のハードルで立ち往生しています。

4

6 に答える 6

13

APIメソッドを使用できます:startForeground()。これがその説明です:

開始されたサービスは、startForeground(int、Notification)APIを使用して、サービスをフォアグラウンド状態にすることができます。システムは、サービスをユーザーがアクティブに認識しているものと見なし、メモリが不足しているときに強制終了する候補ではないと見なします。(現在のフォアグラウンドアプリケーションからの極端なメモリプレッシャーの下でサービスが強制終了されることは理論的には可能ですが、実際にはこれは問題ではありません。)

ここでは、これを使用する方法の例を見つけることができます。

質問に関しては、サービスが強制終了されるのを防ぐことはできません。それはシステムによって殺される可能性があります。システムサービスでさえ殺される可能性があります。これが発生した場合、それらは再起動されます。同じアプローチを使用できます。

于 2012-07-27T15:19:19.607 に答える
6

Androidブロードキャスト「android.intent.action.PACKAGE_RESTARTED」を受信するヘルパーアプリを作成できます。アプリが強制終了された場合、ヘルパーはそのブロードキャストを受信し、アプリなどを再起動できます。

それが「Smart App Protector Free」のやり方です。

悪い点は、ユーザーが 1 つではなく 2 つのアプリをインストールする必要があることです。

于 2013-03-13T05:42:07.630 に答える
5

ルート権限を取得されたデバイスがなければ、これを直接防ぐ方法はありません。SDKは、この種の問題を防ぐのに役立ちます。

あなたは「本当に邪悪な」トリックをすることができて、2つのアプリケーションで2つのサービスを持つことができます。各サービスは他のサービスを監視し、停止した場合は再起動します。これは厄介ですが、ほとんどの場合、最速の指の子供でさえ両方のアプリケーションを殺すことができませんでした。

于 2010-05-07T02:44:46.317 に答える
3

まだ答えを探している人にとっては、これが正しいかもしれません:

できないこと: サービスを強制終了できないようにします。低いメモリで実行している場合、システムは常にサービスを強制終了します。しかし

サービスが強制終了されたときにサービスを再起動するようにシステムに指示します。このコードを見てください:

public static final int START_REDELIVER_INTENT

API レベル 5 で追加

から返す定数onStartCommand(Intent, int, int):

このサービスのプロセスが開始中に強制終了された場合 ( から戻った後onStartCommand(Intent, int, int))、再起動がスケジュールされ、最後に配信されたインテントが を介して再配信されonStartCommand(Intent, int, int)ます。このインテントは、サービスがstopSelf(int)start で呼び出されるまで再配信がスケジュールされたままになります。 ID が に提供されましたonStartCommand(Intent, int, int)。サービスは、onStartCommand(Intent, int, int)送信されたすべてのインテントの処理が完了していない場合にのみ再起動されるため、null インテントの呼び出しを受信しません (そのような保留中のイベントは再起動の時点で配信されます)。

定数値: 3 (0x00000003)

于 2014-02-21T10:09:09.327 に答える
1

戻り値の型を START_STICKY に設定するだけです。

于 2015-08-02T19:22:14.663 に答える