问题描述
我有一个需要在后台长时间运行的应用程序。所以我为此使用前台服务。每隔15分钟,我需要触发一个功能并执行一些过程。为了触发此功能,我使用了所有可能的方式,例如Alarm manager,Work Manager,Handler
但是当应用程序进入后台时,它们都不起作用。
问题:在特定时间触发功能的最佳方法是什么,以确保它一定会在所有可能的情况下触发,例如后台,前景和打ze的应用程序。
解决方法
尽管那里的大多数电话都具有自己的ROM版本,但工作管理器完全取决于制造商。我引用
工作经理取决于设备制造商。就我而言 miui设备,如果 应用被杀死或重启。当我提供 具有“自动启动权限”的应用程序。
如果您愿意使用 autostart 会有所帮助。现在,制造商ROM的问题因Android用户而异,您不能仅依靠一种方法使其在所有设备上均可工作。底线是这个
如果您想更加安全,并且想要运行关键代码而不会失败,我建议您使用前台服务,编写一个基于时基的触发器的实现,它将运行。基本方法是使用TimerTask
或可运行文件,并将其发布延迟15分钟。
请记住它必须是前台服务,并且附带一个条件条件以使前台通知始终处于运行状态。现在,这将对用户可见并使其烦恼。
作为Android平台的安全功能,您在任何情况下都无法 在这种情况下,拥有前台服务而又没有 通知。这是因为前景服务消耗了 大量的资源,并且需要不同的调度 限制(即不会很快消失)比背景 服务,用户需要知道他们可能正在吃什么 电池。所以,不要这样做。
但是,可能会收到“伪造”通知,即您可以 制作一个透明的通知图标(iirc)。这非常 对您的用户不屑一顾,您没有理由这样做,其他 而不是杀死他们的电池从而制造恶意软件。
如果正在考虑隐藏通知,并且它可以在android 7.1下运行,则 MAY VIOLATE Google Play's developer policies.
对于后台服务,请使用此
//The task which you want to execute
private static class MyTimeTask extends TimerTask
{
public void run()
{
//write your code here
}
}
public static void main(String[] args) {
//the Date and time at which you want to execute
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormatter .parse("2012-07-06 13:05:45");
//Now create the time and schedule it
Timer timer = new Timer();
//Use this if you want to execute it once
timer.schedule(new MyTimeTask(),date);
//Use this if you want to execute it repeatedly
//int period = 10000;//10secs
//timer.schedule(new MyTimeTask(),date,period );
}