Android应用如何在手机启动时延迟服务启动

5

你好,当我的应用程序收到ACTION_BOOT_COMPLETED时,它会启动一个服务。 我想将其延迟60秒左右。 我能在以下位置实现吗:

public class StartAtBootServiceReceiver extends BroadcastReceiver 
{

        public void onReceive(Context context, Intent intent) 
        {
           // Delay...60sec
        }
}
2个回答

4

使用Timer()TimerTask()

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //run your service
            }
        }, 60000);

谢谢,我会尝试的,Prashast 还提到了 AlarmManager。哪个更好呢? - Erik
对于如此简单的延迟,AlarmManager 是一种开销。它通常用于更复杂的情况下。 - Vladimir Ivanov
Android文档指出:“在考虑将接收器阻塞并将其视为候选项进行终止之前,系统允许的超时时间为10秒”。因此,在onReceive中使用Timer可能不可靠。我会选择AlarmManager! - wrygiel
1
为了澄清 - 当然,调度是即时的,并且onReceive很快就会结束,但是接收器对象必须保留在内存中才能使TimerTask正常工作。但是由于在离开onReceive后系统可能会释放接收器对象,因此您不应该使用它。 - wrygiel

2

当您收到BOOT_COMPLETED意图时,应使用AlarmManager设置一个待定的意图,在60秒后触发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接