我的一个应用程序执行的操作非常相似。要在给定时间段后唤醒服务,我建议postDelayed()
有一个处理程序字段:
private final Handler handler = new Handler();
和复习 Runnable
private final Runnable refresher = new Runnable() {
public void run() {
}
};
您可以在可运行程序中触发通知。
在服务构建中,在每次执行后启动它,如下所示:
handler.postDelayed(refresher, );
在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));
}
}
阻止操作系统终止该服务非常棘手。此外,您的应用程序可能会出现RuntimeException
和崩溃,或者您的逻辑可能会停顿。
就我而言,总是使用刷新屏幕上的服务似乎有所帮助BroadcastReceiver
。因此,如果更新链停滞不前,它将在用户使用手机时恢复。
在服务中:
private BroadcastReceiver screenOnReceiver;
为您服务 onCreate()
screenOnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
};
registerReceiver(screenOnReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
然后注销您的服务上onDestroy()
与
unregisterReceiver(screenOnReceiver)