私のアプリの 1 つは、非常に似たようなことを行います。一定期間後にサービスを起動するには、お勧めしますpostDelayed()
ハンドラー フィールドを用意します。
private final Handler handler = new Handler();
そして復習Runnable
private final Runnable refresher = new Runnable() {
public void run() {
// some action
}
};
ランナブルで通知を起動できます。
サービスの構築時、および各実行後に次のように開始します。
handler.postDelayed(refresher, /* some delay in ms*/);
投稿onDestroy()
を削除する
handler.removeCallbacks(refresher);
ブート時にサービスを開始するには、自動スターターが必要です。これはあなたのマニフェストに入ります
<receiver android:name="com.example.ServiceAutoStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
はServiceAutoStarter
次のようになります。
public class ServiceAutoStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, UpdateService.class));
}
}
OS がサービスを強制終了するのを止めるのは難しい作業です。また、アプリケーションがRuntimeException
クラッシュしたり、ロジックが停止したりする可能性があります。
私の場合、画面上のサービスをBroadcastReceiver
. そのため、更新のチェーンが停止した場合、ユーザーが電話を使用すると復活します。
サービス内:
private BroadcastReceiver screenOnReceiver;
あなたのサービスでonCreate()
screenOnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Some action
}
};
registerReceiver(screenOnReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
次に、サービスの登録を解除しonDestroy()
ます
unregisterReceiver(screenOnReceiver);