問題タブ [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 - Android ハンドラーがメッセージを受信しない
私の Android アプリケーションでは、2 つのハンドラーを作成しました。1 つのハンドラーがメッセージを受け取り、待機中 (wait(); を呼び出す)。この時点で、2 番目の Handler にメッセージを投稿しても、受信していません。しばらくすると、アプリケーションが「強制終了」または「待機ボタン」に応答しないというダイアログ ボックスが表示されます。
1 つのハンドラーの wait() が原因で、2 番目のハンドラーがメッセージを受信するのをブロックしていると思います。
この問題の解決策を教えてください。
android - 単純な Handler の代わりに、LoaderManager で AsyncTaskLoader を使用するのはなぜですか?
UI スレッドから非同期タスクを実行してから UI を変更することは、Android 開発の一般的な問題であるため、時間をかけて調査し、さまざまな手法を試してみて、自分に最適なものを見つけることにしました。
私が重要だと思ったこと:
- 確実に動作するはずです
- コードの可読性
Activity
またはFragment
、できるだけ多くのスレッド管理を排除する必要があります
以下は、さまざまな方法に関する私の印象 (間違っている可能性があり、一部は単なる意見です) の要約です。
非同期タスク
私が最初にAndroidに飛び込んだとき、私はsimple AsyncTask
withoutを使用していました:LoaderManager
- 断続的な問題が
AsyncTaskManager
あったため、アクティビティのライフサイクルでそれらを管理するために独自に作成しました。 - タスクの数にはいくつかの制限があり、メモリ リークが以前に報告されています。
- これらの最大の問題は、コードが非常に複雑になり、コードを単純化すると、そもそもそれらを使用する目的が損なわれることでした。
LoaderManager を使用した AsyncTaskLoader
これはこれを行うための推奨される方法のように思われるので、少し調査しました。
- これらについて少し読んだ後、この方法が推奨される主な理由は、
Fragment
ライフサイクルでタスクを管理するためであり、私の理解では、基本的に必要に応じてタスクを再起動するだけです。アクティビティが再開された後、アクティビティが再開される前に開始されたタスクの結果を受け取ることができないようです。 - すべてのタスクパラメーターは、オブジェクトである必要がある
Parcelable
かSerialiazable
、オブジェクトに入る必要があるようですBundle
。
ハンドラー、スレッド、メッセージ付き
これは私が落ち着いた方法です:
- 実装が簡単で、非常にカスタマイズ可能です。
- タスクを実行するスレッドにアクセスできます: 優先度の設定、デバッグ用のスレッド名の設定、デーモンの設定など。
- ボタンを何度もクリックし、結果とスレッドが点滅するのを見る目のテストに基づいて、AsyncTasks を使用するよりもはるかに応答性が高いようです ;) これをベンチマークすることができました。
- ライフ サイクルの問題を処理するために、メッセージを管理するシングルトン クラスを作成できます (プロセスが生きている間持続します)。特定のアクティビティのハンドラーが設定されていないときにそれらを保存し、見逃したメッセージを要求する場合はアクティビティ ハンドラーに転送します。つまり、タスクを同じパラメーターで再起動する必要はありません。これは、冪等でないタスクにとって重要な場合があります。
Handler
したがって、 、Threads
、およびを使用Messages
する方がはるかに優れたソリューションであるという結論に達しましたが、私が見たほぼすべての場所でAsyncTaskLoader
メソッドを使用することが推奨されていたため、何かが欠けていると確信しています。私は何が欠けていますか?
入力していただきありがとうございます。
android - TextView のテキストを更新すると GC_CONCURRENT の問題が発生する
私の問題
そのように初期化され、メソッドを呼び出してオブジェクトを更新するタイマーがあります。問題は、タイマーが起動するたびに LogCat で GC_CONCURRENT 出力を取得していることです。
これは、タスクと一緒にタイマーを初期化したものです。
したがって、これは一度呼び出され、再度呼び出されることはありません (タイマーが停止して再起動されない限り)。
私の更新方法はそのように見えます。
次に、このスレッドから UI スレッドへの値の取得を処理するために使用する Handler を次に示します。
これは問題ではないと思います。問題は、TextView をコメントアウトしたときに実際に更新しているフラグメントにあると思いますがthis.durationValueTxtView.setText("TIME");
、それはもう起こりません。
私の質問
ハンドラーの作成、タイマーの作成、タイマー タスクの作成、テキストビューの参照に関して何か不足していますか? なんでも?
前もって感謝します
java - Android のマルチスレッド化: メッセージ パッシング
Android Handlerは同時メッセージ パッシングの実装ですか?
を使うHandlerThread
ことで、複数のワーカースレッド間で簡単に通信できるようです。しかし、私が理解しているように、同時実行でのメッセージの受け渡しは共有メモリの使用に基づいています。Handler の実装のメカニズムを理解しようとしましたが、まだ明確ではありません。
Handler
簡単に言えば、Android はどのように機能するのでしょうか。
android - AlarmManager または Handler を使用する必要がありますか?
私は、デバイスのセンサーを常にポーリングするアプリを作成しており、頻繁にいくつかの統計をファイルに書き留める必要があります。これは、1 秒に 1 回の速さでも、1 分に 1 回の遅さでもかまいません。メソッドを使用Handler's
postDelayed()
するか、単にスケジュールする必要がありAlarmManager
ますか?
android - サービスから呼び出されたスレッド内でハンドラーを使用する
ハンドラーを作成するスレッドがあります。スレッドはサービスから呼び出されます。問題は、サービスから呼び出されたため、Activity.runOnUiThread()を使用できないことです。アクティビティではなくコンテキストにのみアクセスできます。
ハンドラーを作成すると、このエラーが発生します。
コードは次のとおりです。
たくさんのステートメントを削除したので、コードは奇妙に見えるかもしれません。
android - 背景付きのアンドロイドアラームが鳴る
私のアプリケーションの1つでは、複数のアラームを提供しており、完全に正常に機能しています。バックグラウンドのインターネット関連のタスクを使用して、そのアラーム機能を拡張したいと考えています。特定の特定の値のアプリケーションにアラームが設定されている場合、30 秒間隔でサーバーからその値のチェックを開始します。同じ値が返されるたびにアラームが鳴ります。サーバーは 30 秒ごとに新しいデータで更新されます。
現在、ブロードキャスト レシーバーと異なる保留中のインテント ID を使用して複数のアラームを設定しています。どのように実装を開始すればよいですか? このアラーム マネージャ、サービス、レシーバ、ハンドラ、AsyncTask のどれを使用すればよいか混乱しています。
どんな助けでも大歓迎です。ありがとう。
android - ハンドラーデータの IO スループット?
android の実現可能なデータ IO スループットはHandlers
? スレッド間で未加工のオーディオやビデオを渡すのに十分ですか? それは持続可能であるべきですか?
Android Handler
docs、 $WEB_SEARCH 、または this ごとの SO で、これへの参照は見たことがありません。
android - オーディオ Android が強制的にアプリを閉じる
曲のリスト ビューを備えたオーディオ プレーヤーを作成しました。ユーザーがリスト ビューのアイテムをクリックすると、音楽プレーヤーが起動し、一時停止するボタンが表示されます。これはすべて正常に機能しました。
私の次の目的地は、曲の進行状況を更新するためのシーク バーと、現在の曲の長さと曲の合計の長さを表す 2 つのテキスト ビューを実装しました。私はコードを書きましたが、すべて問題ないようですが、実行するたびに強制的に閉じられます
助けてください!
.Java クラス
ユーティリティ クラス
xml ファイル 1
2 番目の xml ファイル:
LogCat:
android - AsyncTask Android でプロセスを処理する
doInBackground() で 2 つのタスクを実行しています。1 つのタスクはサイトからデータを読み取り、別のタスクは URL から xml ファイルを解析して imageview に画像を設定します。しかし、両方のタスクを分離したいのは、サイトからの読み取りが完了したら、textview にテキストを設定する必要があることを意味します。その後、xml 解析が開始されます。それで、なにかお手伝いできますか ?
これが私のコードです:
これら2つのタスクをどのように処理すればよいですか? 最小限の時間がかかるように、解決策を提案してください。はやく返信してください。事前にサンクス。