質問: RECEIVE_BOOT_COMPLETEDの放送受信機を介したデータベースへのアクセス 電話機の起動が完了すると、データベースからの時間、分、++の情報に基づいて、いくつかのアラームを自動的に再登録します。 私は放送のリヴァイバーでこれをやろうとしますが、うまくいかないでしょう。 起動時にデータベース(DB)ヘルパークラスにアクセスしようとするとクラッシュします。 DBヘルパークラスは、アプリケーションからアクセスするときに正常に動作します。 これは可能ですか、サービスのような代替ソリューションを使用する必要がありますか?
回答: マニフェストに登録されたすべてのブロードキャストレシーバでデータベースI/Oを実行する必要はありません。どのくらい時間がかかるかはわかりません(他のデバイスアクティビティに基づいて)、あなたの `onReceive()`メソッドはメインのアプリケーションスレッド上で実行されているため、時間が限られ、CPUフットプリントが大きくなります。 データベースI/Oを実行し、アラームをスケジュールするための制御を `IntentService` に渡してください。バックグラウンドスレッドで `IntentService` はあなたの `onHandleIntent()`を呼び出すので、必要な時間がかかるので、 `onHandleIntent()`/code>が完了します。