1

私はSTART_NOT_STICKYアンドロイドで混乱しています。そしてここに2つの質問があります:

  1. onStartCommandの後で自動的に停止するstopselfため、サービスを明示的に呼び出す必要はありません。START_NOT_STICKY

  2. サービスでworkerThreadを開始した場合、START_NOT_STICKYを返した後も実行を継続しますか?START_NOT_STICKYを返した後、サービスを自分で停止する必要があるのはなぜだろうか

  3. サービスがonStartCommandとonBoundの両方を実装している場合、どこでstopSelfを呼び出す必要がありますか?

編集(Androidドキュメントから)

開始されたサービスの場合、onStartCommand()から返される値に応じて、実行を決定できる2つの追加の主要な操作モードがあります。START_STICKYは、必要に応じて明示的に開始および停止されるサービスに使用されます。START_NOT_STICKY or START_REDELIVER_INTENT are used for services that should only remain running while processing any commands sent to them.

4

2 に答える 2

3

いいえ、サービスはから戻った後も停止しませんonStartCommand()こちらをご覧ください。

START_ *値は、何らかの理由でシステムがサービスを強制終了することを決定した場合にのみ、システムに何をすべきかを示します。それでも、実行中のサービスを呼び出すstopSelf()stopService()停止する必要があります。そうしないと、サービスは無期限に実行されるか、システムがプロセスを強制終了することを決定するまで実行されます。

Androidシステムは、サービスが実行されていたプロセスを強制終了すると、onStartCommand()から返された値に基づいて、可能な場合はサービスを再作成しようとします。

  • 返された値がであった場合START_STICKY、サービスプロセスが再作成され、保留中のインテントまたはnull(保留中のインテントがない場合)を指定してonStartCommand()が呼び出されます。
  • が返された場合START_NOT_STICKY、システムはサービスプロセスを再度作成し、保留中のインテントがある場合にのみonStartCommand()を呼び出します。

したがって、START_NOT_STICKYは、システムがサービスを強制終了することを決定した場合、および保留中のインテントがない場合にのみ、サービスが開始されないことを保証します。理解するためにこれを見てくださいSTART_NOT_STICKY

于 2013-02-28T03:52:06.180 に答える
0

Vijay、別のスレッドで質問する必要がありますが、ここに解決策があります

これは、BroadcastReceiverを実装することで実現できます。AndroidManifest.xmlでレシーバーを作成します。-

<receiver android:name="com.demo.bootup.BootupBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

適切な権限が設定されていることを確認してください

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

これで、onReceive()メソッドでサービスを開始できます。

@Override
public void onReceive(Context context, Intent intent) {
   Intent bootupIntent = new Intent(context, BootupService.class);
   context.startService(bootupIntent);
}

BootupService.classではなくServiceクラスを呼び出すようにしてください

于 2013-02-28T18:39:40.393 に答える