サーバーでdb4oを更新するためにAsyncTaskを使用したいと思います。doInBackgroundメソッドで、サーバーに接続し、db4oを更新して、pendingintentsをスケジュールします。UIを変更したり、トーストを表示したりしないでください。
最初に、次のエラーが発生しました。
Can't create handler inside thread that has not called Looper.prepare()
Looper.prepare()を追加した後、正常に動作しますが、5回の更新(AsyncTask)に対してのみです。私はこのトピックを読みました:AsyncTaskスレッドは決して死ぬことはありません(Android)、そして私は今それが失敗することはありません。6番目の更新をスローすると、アプリがクラッシュします。
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.RuntimeException: Only one Looper may be created per thread
at android.os.Looper.prepare(Looper.java:74)
(...)
Looper.loop()が必要であるというドキュメントを読みましたが、これでアプリがクラッシュします。
例:
protected Integer doInBackground(Void... params) {
Looper.prepare();
update = new Update();
update.checknewObjects();
update.deleteOldObjects();
update.updateObjects();
Looper.loop();
}
なぜルーパーが必要なのですか?5回の更新後にアプリがクラッシュするのはなぜですか?Looper.loop()はどこでスケジュールできますか?
前もって感謝します!