ScheduledExecutorService android在启动时不起作用

时间:2014-04-09 20:58:38

标签: java android

我想在启动时启动ScheduledExecutorService以便全天检查我的数据库。 我应该在启动时启动此服务,因为如果用户没有启动应用程序,则此服务无法正常工作。

因此,当我在应用启动时启动ScheduledExecutorService时,它可以正常启动,但启动时ScheduledExecutorService似乎无效。

启动时BroadcastReceive正在运行。

这是我的代码

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {

        Toast.makeText(context, "Ca passe", Toast.LENGTH_LONG).show();

        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Runnable() {
            public void run() {
                Log.e("sc", "Ca passe");    
                Toast.makeText(context,"scheduler fonctionne", Toast.LENGTH_LONG).show();;
            }
        },10, 10, TimeUnit.SECONDS);
    }
}

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要阅读文档。特别是关于BroadcastReceiver生命周期的文档:

  

BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效。一旦您的代码从此函数返回,系统会认为该对象已完成且不再有效。

     

这对你在onReceive(Context,Intent)实现中可以做的事情有重要的影响:任何需要异步操作的东西都不可用,因为你需要从函数返回来处理异步操作,但是那时候BroadcastReceiver不再处于活动状态,因此系统可以在异步操作完成之前自由终止其进程。

     

特别是,您可能无法在BroadcastReceiver中显示对话框或绑定到服务。对于前者,您应该使用NotificationManager API。对于后者,您可以使用Context.startService()向服务发送命令。

如果您需要使用Executor,请将其托管在实际的Android Service中。否则,请考虑使用AlarmManager唤醒Service