問題タブ [looper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
51187 参照

android - AsyncTaskでトーストを上げる方法、ルーパーを使用するように求められます

バックグラウンドでAsyncTaskによって完了したタスクがあります。ある時点で、何かが完了したことを示すトーストを発行する必要があります。

試しましたが失敗しました Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

どうやってやるの?

0 投票する
1 に答える
440 参照

iphone - ブラックベリーはAndroidsLooperに相当しますか?

AndroidにはLooperがあり、iPhoneにはRunLoopsがあります。Blackberryには、スレッドをキューに入れて実行するための同様の機能が備わっているようです。

誰か知っていますか?

0 投票する
4 に答える
100195 参照

java - ProgressDialog の AsyncTask 内で Looper.prepare() を呼び出していないスレッド内でハンドラを作成できない

このエラーが発生する理由がわかりません。バックグラウンドでいくつかのプロセスを実行するために AsyncTask を使用しています。

私は持っている:

doInBackground()条件に応じて入ると、次のようになります。

試行するたびにdownloadSpinnerProgressDialog.show()、エラーが発生します。

アイデアはありますか?

0 投票する
2 に答える
6629 参照

android - Looperを複数回呼び出すと、「デッドスレッドのハンドラーにメッセージが送信されます」

ルーパーを追加する独自のThreadFactoryでExecutor[固定スレッドプール]を使用しています。

ネットワーク要求を行うスレッドを実行していますが、ネットワークに障害が発生した場合、ダイアログメッセージをユーザーに表示したいと思います。このプロセスは、UIスレッドでリクエストを作成して表示する必要があるため、かなり複雑です。ネットワークスレッドにループを追加し、UIスレッドからメッセージが送信されるのを待つだけで、ダイアログに対するユーザーの応答を待つことができます。これにより、ネットワーク要求をwhile(tryAgain)スレッドにカプセル化できます。Looper.loop()メソッドが2回目に呼び出され(2番目のネットワークエラーダイアログが表示された後)、ダイアログによって(UIスレッドで)メッセージがネットワークスレッドのハンドラーに送信される場合を除いて、すべてが正常に機能します。

AlertDialogインスタンスには、OnClickListenerがあります。

スレッドがまだアクティブでhandler.getLooper().getThread().isAlive()あり、常にtrueを返すことを確認しましたが、それでも「デッドスレッドのハンドラーにメッセージを送信する」ことができます。メッセージ/ハンドラーがスレッドが停止しているとどのように判断したのですか?.isAlive()メソッドに依存するべきではありませんか?結局、私はスレッド管理ビルドをAndroidOSに複製することを避けようとしています:-)

0 投票する
4 に答える
8806 参照

android - Android で Looper と Handler のコードをより適切に単体テストするにはどうすればよいですか?

android.os.Handler クラスを使用して、バックグラウンドでタスクを実行します。これらを単体テストするときLooper.loop()は、テスト スレッドがバックグラウンド タスク スレッドの処理を待機するように呼び出します。後で、Looper.myLooper().quit()(テスト スレッドでも) を呼び出して、テスト スレッドが を終了しloop、テスト ロジックを再開できるようにします。

複数のテストメソッドを書きたいと思うまでは、すべてうまくいきます。

問題は、Looper が同じスレッドでの終了と再起動を許可するように設計されていないように見えることです。そのため、単一のテスト メソッド内ですべてのテストを行う必要があります。

Looper のソース コードを調べたところ、回避策が見つかりませんでした。

自分の Hander/Looper コードをテストする他の方法はありますか? それとも、バックグラウンド タスク クラスを作成するための、よりテストに適した方法でしょうか。

0 投票する
4 に答える
9818 参照

android - Android: スレッドごとに作成できる Looper は 1 つだけです

Android ルーパーに問題があります。AsynTask を拡張したクラスがあります。doInBackground() メソッド内には、 Looper.prepare() と以下のコードがあります。

初めてうまく動作しますが、その後、「スレッドごとに作成できるルーパーは1つだけです」という例外が発生します。

Looper.quit() を使用する解決策があるようですが、実装できません。

どんな助けでも大歓迎です。

0 投票する
2 に答える
5765 参照

android - CountDownTimer: "Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません"

「Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できない」という一般的な問題が以前に尋ねられたことは知っていますが、この場合にどのように適用されるかを理解するのに苦労しています。

UI 以外のスレッドで新しい CountDownTimer を作成しようとしていますが、これがこのエラーの原因だと思いますが、メイン スレッドでタイマーを使用する必要がある理由がよくわかりません。私が見る限り、ルーパーを持つスレッドで実行する必要があるコールバック ハンドラーがあるように見えますが、非 UI スレッドにはデフォルトではありません。私のオプションは次のとおりです。1)この非UIスレッドにルーパーを持たせるか、2)UIスレッドにこのタイマーを構築できる奇妙なメソッドを作成します。どちらも私にはばかげているようです。誰かがその意味を理解するのを手伝ってくれますか?

また、Looper と MessageQueue に光を当てる便利なリンクを知っている人はいますか? 私が示したと確信しているように、私はそれらをよく把握していません。ありがとうございました!

0 投票する
1 に答える
1239 参照

java - Android: ルーパー/ハンドラー vs. Java オブザーバー?

これらは競合他社ではありませんか?そうではないと思いますが、見ていません。

Service に新しい xyz があるときに学習する必要がある Activity のコンテキスト内ではどうですか?

ありがとう!

0 投票する
2 に答える
50528 参照

android - AsyncTask および Looper.prepare() エラー

次のコードがあります

いくつかのテスト デバイスでは問題なく動作するようですが、開発コンソールに多くのエラーが表示されます。この Looper.prepare() を配置する理由と場所がわかりません。必要ですか?

リクエストに応じて MyLocation.java

0 投票する
2 に答える
9893 参照

android - Android: ハンドラーと postDelayed() を使用した場合の問題

Handler を使用して、一定時間内にコードを実行しようとしています。

これは私の2つのクラスでうまく機能しますが、私はこれで問題を抱えています:

私のクラスの 1 つは Activity を拡張し、(Runnable を実装する) Thread を開始します。

私の run() メソッドには、他のクラスと同様に次のものがあります。

プログラムは不平を言っているようです:

投稿する理由がわかりません、誰か助けてくれませんか?

編集:私のコードの一部を追加する:

タイマーが 30 秒に達した場合:

どうもありがとう、

ジャリー