最近、経験豊富な人にとっては簡単に見えるかもしれないが、私には理解するのが非常に難しいエラーに遭遇することが増えています。
X 分ごとに新しいフィード エントリをチェックするバックグラウンド サービスを作成しようとしています。したがって、私はサービスからループを開始しています。そのループは asynctask を作成します。
私の 4.1 フォンでは魅力的に動作しますが、私の 2.3 エミュレーターでは次のように強制終了します。
09-11 19:53:35.905: E/AndroidRuntime(354): FATAL EXCEPTION: AppConstructorPushLoop
09-11 19:53:35.905: E/AndroidRuntime(354): java.lang.ExceptionInInitializerError
09-11 19:53:35.905: E/AndroidRuntime(354): at com.appconstructor.actest.PushNotificationService$1.run(PushNotificationService.java:54)
09-11 19:53:35.905: E/AndroidRuntime(354): at java.util.Timer$TimerImpl.run(Timer.java:284)
09-11 19:53:35.905: E/AndroidRuntime(354): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-11 19:53:35.905: E/AndroidRuntime(354): at android.os.Handler.<init>(Handler.java:121)
09-11 19:53:35.905: E/AndroidRuntime(354): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
09-11 19:53:35.905: E/AndroidRuntime(354): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
09-11 19:53:35.905: E/AndroidRuntime(354): at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
09-11 19:53:35.905: E/AndroidRuntime(354): ... 2 more
これは通常、UI 以外のスレッドで UI を実行しようとしていることを意味しますが、そうではありません。実際、ASyncTask のすべてのアクティビティをコメントアウトしても、強制的に閉じられます。ループを開始する行をコメントアウトすると、強制終了が停止するだけです
これは私の 2.3 エミュレーターでのみ発生し、私が使用している 4.0 スタイルの通知とは関係ありません。
誰かがこれについてもっと知っていますか?
ありがとう!
edit -> Looper.prepare() を呼び出すと、スレッドごとに 1 回だけ発生する可能性があるというエラーが表示されます。