我想在启动时启动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);
}
}
你有什么想法吗?
答案 0 :(得分:0)
您需要阅读文档。特别是关于BroadcastReceiver
生命周期的文档:
BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效。一旦您的代码从此函数返回,系统会认为该对象已完成且不再有效。
这对你在onReceive(Context,Intent)实现中可以做的事情有重要的影响:任何需要异步操作的东西都不可用,因为你需要从函数返回来处理异步操作,但是那时候BroadcastReceiver不再处于活动状态,因此系统可以在异步操作完成之前自由终止其进程。
特别是,您可能无法在BroadcastReceiver中显示对话框或绑定到服务。对于前者,您应该使用NotificationManager API。对于后者,您可以使用Context.startService()向服务发送命令。
如果您需要使用Executor
,请将其托管在实际的Android Service
中。否则,请考虑使用AlarmManager
唤醒Service
。