Во-первых, вам нужно выяснить, сколько видов услуг в Android. AFAIK, есть:
Эти службы останавливаются по-разному.
stopService()
в действии или фрагменте, где вы запускаете эту службу, или позвоните stopItself()
в свою собственную службу. И обратите внимание только на этот метод триггера службы onDestroy()
. stopService()
и stopItself()
делают так же, как и переднего плана. Кроме того, вы должны знать, что эта служба находится в том же потоке с активностью или фрагментом, вызывающим ее, поэтому, если вы уничтожаете активность или фрагмент, эта служба также остановится, но без вызова onDestroy()
. Это в основном разрушает подполье. Таким образом, если вы хотите поймать, когда эта остановка службы, вам нужно добавить android:stopWithTask="false"
при объявлении службы в файле манифеста следующим образом: <application>
//....
<service android:name=".services.catchingStopService"
android:stopWithTask="false" />
//....
</application>
И теперь в вашем классе обслуживания вы можете переопределить этот метод, который срабатывает, когда эта служба перестает: @Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Your job when the service stops.
}
bindService()
и unbindService()
, вы обнаружите, что он полностью совпадает с starService()
и stopService()
ResultReceiver
для связи между сервисом и активностью или фрагментом. Это похоже на BroadcastReceiver
. Вы можете легко искать пример в Google. Подвести итоги: основываясь на цели, выберите тип обслуживания, который вам удовлетворит. И все они согласны с:
onStartCommand()
, чтобы иметь возможность справиться с тем, когда службы перестают работать как перезапуск или что-то еще. Вот несколько ключевых слов, которые вы можете найти: START_STICKY
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<actionandroid:name="android.intent.action.QUICKBOOT_POWEROFF" />