2011-11-24 88 views
3

当手机完成启动时,我想根据数据库中的小时,分​​钟++信息自动重新注册一些警报。RECEIVE_BOOT_COMPLETED通过广播接收器访问数据库

我尝试用broadcastreveiver来做到这一点,但它不起作用。 在启动时尝试访问数据库(DB)辅助类时崩溃。通过应用程序访问它时,DB助手类可以正常工作。

这是可能的还是我必须使用一些替代解决方案,如服务?

回答

8

您不想在任何清单注册的广播接收器中执行数据库I/O。您不知道需要多长时间(基于其他设备活动),并且您的onReceive()方法正在主应用程序线程上运行,所以您的时间有限且CPU占用空间很大。

请将控制权交给IntentService,以执行数据库I/O并安排警报。 IntentService将在后台线程中调用您的onHandleIntent(),因此您可以抽出所需时间,并且onHandleIntent()完成时服务自动消失。

+0

您可能还想切换到WakefulBroadcastReceiver以防止设备在启动IntentService时进入睡眠状态(https://plus.google.com/u/0/+AndroidDevelopers/posts/i6MzCp1NyzF) – Johannes