3
当手机完成启动时,我想根据数据库中的小时,分钟++信息自动重新注册一些警报。RECEIVE_BOOT_COMPLETED通过广播接收器访问数据库
我尝试用broadcastreveiver来做到这一点,但它不起作用。 在启动时尝试访问数据库(DB)辅助类时崩溃。通过应用程序访问它时,DB助手类可以正常工作。
这是可能的还是我必须使用一些替代解决方案,如服务?
当手机完成启动时,我想根据数据库中的小时,分钟++信息自动重新注册一些警报。RECEIVE_BOOT_COMPLETED通过广播接收器访问数据库
我尝试用broadcastreveiver来做到这一点,但它不起作用。 在启动时尝试访问数据库(DB)辅助类时崩溃。通过应用程序访问它时,DB助手类可以正常工作。
这是可能的还是我必须使用一些替代解决方案,如服务?
您不想在任何清单注册的广播接收器中执行数据库I/O。您不知道需要多长时间(基于其他设备活动),并且您的onReceive()
方法正在主应用程序线程上运行,所以您的时间有限且CPU占用空间很大。
请将控制权交给IntentService
,以执行数据库I/O并安排警报。 IntentService
将在后台线程中调用您的onHandleIntent()
,因此您可以抽出所需时间,并且onHandleIntent()
完成时服务自动消失。
您可能还想切换到WakefulBroadcastReceiver以防止设备在启动IntentService时进入睡眠状态(https://plus.google.com/u/0/+AndroidDevelopers/posts/i6MzCp1NyzF) – Johannes