Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ScheduledExecutorService android不';我不能在靴子上工作_Java_Android - Fatal编程技术网

Java ScheduledExecutorService android不';我不能在靴子上工作

Java ScheduledExecutorService android不';我不能在靴子上工作,java,android,Java,Android,我想在启动时启动一个ScheduledExecutorService,以便全天检查我的数据库。 我应该在启动时启动此服务,因为如果用户不启动应用程序,此服务将无法工作 因此,当我启动我的ScheduledExecutorService应用程序启动时,一切正常,但在启动时ScheduledExecutorService似乎不起作用 启动时的BroadcastReceive正在工作 这是我的密码 public class BootReceiver extends BroadcastReceiver

我想在启动时启动一个
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);
    }
}

你有什么想法吗?

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

BroadcastReceiver对象仅在onReceive调用期间有效(上下文、意图)。一旦代码从此函数返回,系统将认为对象已完成且不再处于活动状态

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

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

如果您需要使用执行器,请将其托管在实际的Android中。否则,考虑使用唤醒您的<代码>服务 >