Java 永远在后台运行服务

Java 永远在后台运行服务,java,android,multithreading,Java,Android,Multithreading,我正在开发一个Android应用程序,在这个应用程序中,我必须将当前时间与文件中的时间(保存的时间)进行比较,尽管一切正常。我使用服务,在服务中,我使用线程无限地运行服务,除此之外,我还使用部分唤醒锁定继续服务,即使设备处于睡眠状态,但问题是,我的服务不是获得部分唤醒锁定,而是运行1/2小时,然后再次进入睡眠状态。我不想获得完整的唤醒锁。有没有人可以指导我如何进行比较,也就是说,一旦用户设置了时间,我的服务就会完美运行 提前谢谢你。你做得不对。要创建永久服务,您必须 将其声明为前台。别无选择:

我正在开发一个Android应用程序,在这个应用程序中,我必须将当前时间与文件中的时间(保存的时间)进行比较,尽管一切正常。我使用服务,在服务中,我使用线程无限地运行服务,除此之外,我还使用部分唤醒锁定继续服务,即使设备处于睡眠状态,但问题是,我的服务不是获得部分唤醒锁定,而是运行1/2小时,然后再次进入睡眠状态。我不想获得完整的唤醒锁。有没有人可以指导我如何进行比较,也就是说,一旦用户设置了时间,我的服务就会完美运行


提前谢谢你。

你做得不对。要创建永久服务,您必须 将其声明为前台。别无选择:

myService.startForeground(MY_NOTIFICATION_ID, my_notification);
如果您对此类服务感兴趣的是定期执行快速结束 如果中间的时间段很长,您可能希望使用 增加并提高应用程序的电池消耗

编辑:

要设置前台服务,必须向系统提供通知 对象,只要服务处于前台,就会在通知栏上显示

为什么呢?因为前台服务不能被终止,Android需要知道 用户知道这个事实

设置为前景:

static final int NOTIF_ID = 100;

// Create the FG service intent 
Intent intent = new Intent(getApplicationContext(), MyActivity.class); // set notification activity
showTaskIntent.setAction(Intent.ACTION_MAIN);
showTaskIntent.addCategory(Intent.CATEGORY_LAUNCHER);
showTaskIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pIntent = PendingIntent.getActivity(
                getApplicationContext(),
                0,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT);

Notification notif = new Notification.Builder(getApplicationContext())
                .setContentTitle(getString(R.string.app_name))
                .setContentText(contentText)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pIntent)
                .build();

startForeground(NOTIF_ID, notif);
并恢复到“标准”服务模式:

stopForeground(true).

设置为前台和恢复为后台都可以由服务本身(例如,其onCreate()方法)或外部代码(例如,启动服务的活动)调用。这里没有问题。

您不能永远在后台运行服务。如果没有其他东西,用户将摆脱它,特别是像你建议的那样耗尽电池的服务。为什么你认为你需要一个服务,永远运行,永远开着电池,“将当前时间与文件中保存的时间进行比较”?为什么不使用
AlarmManager
?我如何做到这一点?你能给我一些例子/教程吗?其次,我使用这些服务是因为我希望它能在后台运行,并且无论手机是否处于睡眠状态,都能不断地将保存的时间与当前时间进行比较。有什么帮助吗?我的服务是什么?它是类名吗??我在developers.android.com上读到我的通知ID不应该等于0,对吗?请查看我之前(现在编辑)的帖子以获得答案。