問題タブ [android-handler]
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.
android - Handler.sendMessageDelayed(msg, delay) が正しく動作しない
ロード中に表示されるスプラッシュスクリーンを定義しました。ただし、インターネット接続によっては、読み込みに 600 ミリ秒しかかからないこともあれば、5000 ミリ秒かかることもあります。そのため、ユーザーが画面のちらつきにイライラしないように、スプラッシュスクリーンが少なくとも 3000 ミリ秒表示されるように定義しました。
スプラッシュスクリーンの開始を次のように定義します。
LoadingThread で、ネットワークをチェックし、インターネットからデータをロードします。
ロードが完了するとすぐに、MainActivity で定義されたハンドラーにメッセージを送信します。
LoadingThreads の一部のコード行は、runOnUIThread() によって呼び出されます。残念ながら、時間 < SPLASH_MIN_TIME の場合、メッセージは遅延せず、即座に送信されます。sendMessageDelayed() では、これは当てはまらないと思います。理由を知っている人はいますか?sysout は、遅延時間が正しく計算されていることを示しています。ありがとう!
android - Android タイマー ハンドラ
私はこのコードを使用しています:
実行すると、logcat で次の例外が発生します。
09-06 21:39:39.701: エラー/AndroidRuntime(1433): java.lang.RuntimeException: Looper.prepare() を呼び出していないスレッド内でハンドラを作成できません
android - handler.postdelayedプロセスをキャンセルする
私はhandler.postDelayed()
、アプリの次のステージが実行される前に待機期間を作成するために使用しています。待機期間中、プログレスバーとキャンセルボタンのあるダイアログを表示しています。
私の問題は、時間が経過する前にpostDelayedタスクをキャンセルする方法が見つからないことです。
android - ハンドラ、MessageQueue、Looper はすべて UI スレッドで実行されますか?
私はスレッド化に頭を悩ませようとしていますが、 を使用してHandler
にメッセージ/ランナブルをポストしMessageQueue
、それが によって取得され、処理Looper
のために に送り返されることを知っていHandler
ます。
Handler
アクティビティでに投稿した場合、 Activity
、Handler
、MessageQueue
およびLooper
すべてが UI スレッドで実行されていますか? そうでない場合、誰かがこれがどのようにまとめられたのか説明してもらえますか? :)
android - AlarmManager と Handler Android を使用するさまざまな状況
AlarmManager と Handler を使用するさまざまな状況について、例を挙げて説明してもらえますか。これら2つを交互に使用することの欠点はありますか?
ありがとう。
java - ハンドラーからすべてのコールバックを削除するにはどうすればよいですか?
メインアクティビティによって呼び出されたサブアクティビティのハンドラーがあります。このハンドラーは、一部のRunnableのサブクラスで使用されており、管理できません。さて、イベントでは、アクティビティを終了する前にそれらを削除する必要があります(どういうわけか私は呼び出しましたが、それでも何度も呼び出します)。ハンドラーからすべてのコールバックを削除する方法はありますか?postDelay
onStop
finish()
android - Androidコードで時間の前にハンドラーをキャンセルするにはどうすればよいですか?
サービスが完了していない場合にサービスをシャットダウンするために、1分の遅延タイマーを作成します。このように見えます:
onCreate()内
この1分前に仕事が完了した場合、この遅れたものをキャンセルしたいのですが、方法がわかりません。
android - ハンドラーvsAsyncTaskvsスレッド
とAndroidの違いについて少し混乱しましたHandlers
。私はここStackOverflowでかなりの数のブログと質問を読みました。AsyncTask
Threads
Handler
UIとの通信を提供するバックグラウンドスレッドです。たとえば、プログレスバーの更新は、を介して実行する必要がありますHandler
。ハンドラーを使用すると、の利点がありMessagingQueues
ます。したがって、メッセージをスケジュールしたり、複数のUI要素を更新したり、タスクを繰り返したりする場合に役立ちます。
AsyncTask
似ていますが、実際にはを利用しますHandler
が、UIスレッドでは実行されないため、データのフェッチ、たとえばWebサービスのフェッチに適しています。後でUIを操作できます。
Thread
ただし、UIと対話できず、より「基本的な」スレッドを提供すると、のすべての抽象化を見逃してしまいますAsyncTask
。
ただし、ソケット接続を稼働させたいのですが。これはハンドラーまたはスレッドで実行する必要がありAsyncTask
ますか?UIの操作はまったく必要ありません。使用するパフォーマンスに違いはありますか?
その間、ドキュメントは大幅に改善されました。
java - このスレッド runnable は、完了すると最後にどうなりますか?
サーバーからいくつかの画像をダウンロードするこのスレッドがあります。画像をダウンロードしたら、ハンドラーを呼び出して UI の更新を続けます。したがって、スレッドの stop() は非推奨であるため、使用できません。ここで 2 つの質問があります。
- 最終的にこのスレッドはどうなりますか? (ハンドラー メソッドを呼び出した後、スレッドに何が起こるかを意味します)。
- または、stop() を使用せずにこのスレッドを停止するにはどうすればよいですか?
これが私のコードです。
android - 一部の電話では NullPointerException が発生し、他の電話では発生しない (同じ API レベル)
一部の電話 (すべて 2.3.x) で NullPointerException を取得している Android アプリがありますが、私の電話 (2.3.x) またはシミュレーターでは取得していません。
特定の例外は、それが私のコード内で発生していることを示しているようには見えないので、同じ API の一部のバージョンが正しくないという呼び出しを行っていると思いますか? どうすればいいのかわからない。
logcat のエラー ログは次のとおりです。
デバッガーからのスタック トレースは次のとおりです。
アクティビティが開始されるとすぐにエラーが発生します。デバッグ情報はコードのどこにも示されていませんが、何かが原因であると推測onCreate()
しているのでonCreate()
、問題のアクティビティは次のとおりです。
進行状況ダイアログが表示されず、実行した場合に実行した作業をログに記録するため、最後に作成する新しいスレッド内で実行する作業を実際に実行していないことを私は知っています携帯電話またはシミュレーターで実行すると実行されます)。
私はAndroidに少し慣れていないので、何が原因なのか、同じバージョンのAndroid APIが必要な場合でも、一部のデバイスで発生し、他のデバイスでは発生しない理由がわかりません。誰かが以前にこのようなものを見たことがある場合、または何が原因であるかについて何らかの考えがある場合は、どこを見ればよいかについてのいくつかの指針をいただければ幸いです.