繁体   English   中英

Android - 在特定时间运行功能

[英]Android - Run a function at specific time

我有一个需要在后台长时间运行的应用程序。 所以我为此使用了前台服务。 每 15 分钟,我需要触发一个函数并做一些处理。 为了触发这个功能,我使用了所有可能的方式,比如Alarm manager, Work Manager, Handler但是当应用程序进入后台时,它们都不起作用。 问题:在特定时间触发功能的最佳方式是什么,以确保它肯定会在所有可能的场景中触发,例如应用程序在后台,前台和打瞌睡。

虽然大多数手机都有自己的 ROM 版本,但工作管理器完全取决于制造商。 我引用

工作经理取决于设备制造商。 就我而言,它是一个 miui 设备,它不允许工作管理器在应用程序被终止或重新启动的情况下工作。 当我为应用程序提供“自动启动权限”时,工作经理开始工作。

因此,如果您愿意使用自动启动,它会有所帮助。 现在制造商 ROM 的问题因 Android 用户而异,您不能仅仅依靠一种方法让它在所有设备上运行。 底线是这个

如果您想更安全,并希望在不失败的情况下运行关键代码,我建议您使用前台服务,编写基于时间的触发器的实现,它就会运行。 基本方法是使用TimerTask或 runnable 并将其延迟 15 分钟。

记住它必须是一个前台服务,并且它带有一个案例条件,让前台通知一直运行。 现在这将对用户可见并惹恼他们。

作为 Android 平台的一项安全功能,在任何情况下,您都不能在没有通知的情况下拥有前台服务。 这是因为前台服务比后台服务消耗更多的资源并且受到不同的调度约束(即,它不会很快被终止),并且用户需要知道什么可能会消耗他们的电池。 所以,不要这样做。

但是,可能会有“假”通知,即您可以制作一个透明的通知图标 (iirc)。 这对您的用户来说是非常不诚实的,除了杀死他们的电池并因此创建恶意软件之外,您没有理由这样做。

如果正在考虑隐藏通知并且它在 android 7.1 下工作,则可能会违反Google Play 的开发者政策。

对于后台服务使用这个

//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 );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM