問題タブ [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 (ハンドラーの問題)
isRunning は変数であり、私のアクティビティでは onStop または onPause メソッドを呼び出すたびに false になります。ただし、アプリを閉じても機能しませんダイアログはまだウィンドウを追加しようとしており、エラーが発生しています。
android - アクティビティでハンドラーが呼び出されない
アクティビティでハンドラを作成しました。ハンドラーはアプリケーション オブジェクトに格納されます。
私の計画は、サービスでEmtpyMessageを設定すると、このhandleMessageが呼び出されることです。サービスは、アプリケーション オブジェクトからハンドラーを取得します。
ログを確認しましたが、ハンドル メッセージがないため、私の計画は機能していないようです。サービスが機能するたびにテキストフィールドを更新したいと考えています。
android - Android:いつHandler()を使用する必要があり、いつスレッドを使用する必要がありますか?
長時間実行されるタスクやネットワークを使用するロジックなど、非同期で実行するものが必要な場合、または何らかの理由で、新しいスレッドを開始して実行すると正常に機能します。ハンドラーを作成して実行することも同様に機能します。違いは何ですか?それぞれをいつ使用する必要がありますか?を使用するのではなく、を使用する利点/理由は何ですか?Handler
Thread
PS。-この質問のために、無視しましょうAsyncTask
。-Handler().postDelayed
ユースケースは私には明らかです。この質問のために、タスクをすぐに開始する必要があると仮定しましょう。
android - エラー java.lang.IndexOutOfBoundsException: 無効なインデックス 0、Android アダプターのサイズが 0 です
アクティビティで BaseAdapter を拡張するアダプターがあります。アダプターで、レコードをリストします。ユーザーが任意のレコードをクリックすると、オプションが一覧表示されます。これらのオプションは「送信」と「削除」です。削除オプションはリストからレコードを削除し、送信オプションはレコードをサーバーに送信します。送信が押されると、asynctask が開始されます。削除操作には、ダイアログでハンドラーを使用します (はいまたはいいえ)。
私の問題は、他のレコードの送信中に 1 つのレコードで削除を押すと、アプリケーションがクラッシュし、この例外が発生することです。
サイズを何度も確認しましたが、サイズが 0 ではありません。サイズは問題ないと確信しています。
このコードは私の削除操作からのものです。
私の非同期タスクは非常に典型的です。
私の質問は、なぜこの例外「インデックス 0 、サイズ 0」が発生したのかということです。このサイズは myarraylist のサイズではありません。
このコードを修正するにはどうすればよいですか? また、このサイズの原因は何ですか?
また、削除でハンドラーの代わりに asynctask を使用すると、「Looper.prepare()] を呼び出していないスレッド内でハンドラーを作成できません」という例外が発生しました。そのため、ダイアログに asyncack を入れることはできません。
android - コールバックとハンドラーを使用して Android の UI 要素を変更する
解決策は比較的単純だと思いますが、何かが欠けています。基本的に、ユーザー側からの私のプログラムの流れは、ドロップダウンメニュー(スピナーウィジェット)からアイテムが選択されるまで、画面上のボタンが半透明で応答しないような「ホーム画面」があることです。コード側では、XML ファイルでレイアウトを定義してから、関連するすべてを Java で記述します。したがって、 onCreate() メソッドで、ボタンを次のように初期化しました。
それはうまくいきますが、アイテムがスピナーから選択された後にいくつかの onClickListeners を設定したいと思います。したがって、アクティビティ クラスは onItemClickListener を実装し、コードには次のコールバックがあります。
boolean itemSelected はアクティビティ クラス内のグローバル スコープであり、Toast はデバッグ目的であり、必須ではありません。しかし、私が抱えている問題は、スピナーの項目 (位置 0 の下) が選択された後にボタンを変更しようとしたときです。次のように定義されたメッセージハンドラーがあります。
このハンドラーは、次のような activateButtons() メソッドを呼び出すまでは適切に機能します。
いずれかのコールバックまたはハンドラーで UI 要素を操作しようとすると、常に Java NULL ポインター例外が発生します。私が見逃したのはかなり単純で基本的なものだと確信していますが、問題を見つけることができないようです。誰かアイデアがあれば、ぜひ聞かせてください :) Will SJ
android - Looper はメッセージを Handler に送信することをどのように認識していますか?
問題は、 Thread にLooperにmHandlerを使用するように指示する場所です。
ありがとうございました。以下のコードを使用しています。
java - ハンドラーを使用しているときにメモリリークが発生する可能性がある理由
非静的ハンドラーを使用する場合は警告があります。「ハンドラーは静的である必要があります。そうでない場合、メモリリークが発生しやすくなります。」
私は以下のリンクを読みました、そして私はそれらが何を意味するかを知っています。
https://stackoverflow.com/a/7909437/619424
https://stackoverflow.com/a/11336822/619424
しかし、Handler.java、Message.java、Looper.javaのソースを読んだ後、私は混乱しています...
Looper.loop ()メソッドでは、以下のステートメントを確認できます。
変数は、対応するに名前がmsg
付けられた参照を保持します。メッセージがによって処理されると、 (参照)にディスパッチされ、その後、msgがリサイクルされます。target
Handler
Looper
msg
Handler
target
Message.recycle()メソッドはMessage.clearForRecycle( )メソッドを呼び出します。その中で、次のようになります。
target
に設定されてnull
いる、つまり、Message
への参照を保持していませんHandler
。非静的Handler
がGCされ、との両方Activity
がView
GCされます。
だから私の質問は、なぜメモリリークが発生する可能性があるのかということです。
android - Androidハンドラーのアクションが処理されていません
スレッドからハンドラーにメッセージを渡そうとしていますが、ハンドラーのswitchステートメントのハンドラーアクションが処理されていません。
これは私のハンドラーです:
これは、メッセージがハンドラーに渡されるThread run()メソッドです。Threadは内部クラスです。
なぜこれらの行動が実行されていないのかわかりません。
android - 別のスレッドで実行されている他のクラスからの Android アクティビティの UI の更新
リストビューとアダプターが接続されたアクティビティがあります。データを同期して保持するクラスがあります。(データがどこから来ているかは気にするべきではないと思います)そしてそれは別のスレッドで実行されます。アダプターを更新するクリーンな方法を知りたいのですが、別のスレッドで実行されるため、そのクラスからアクティビティの関数を呼び出すべきではありません。
私が知っている 1 つの方法は、アクティビティでハンドラーを作成し、それを他のクラスに渡して、そこから使用することです。しかし、アクティビティがバックグラウンドにあるかどうかを知りたいのですが、アクティビティの関数を UI スレッドから呼び出すことができるか、アクティビティがフォアグラウンドになったときにのみ呼び出すことができます。
更新を見逃したくないので、アクティビティがフォアグラウンドにあるときに更新したいと考えています。
android - Android - 常に変化するテキスト実装のアドバイスが必要
ユーザーが持っTextView
ているポイントの量を示す があります。ユーザーポイントは、最大まで時間で満たされます。私はTextView
20秒ごとに欲しいです。ポイントが完全に満たされるまでの残り時間を表示します。(たとえば、TextView
「you have 500 points」が表示されている場合、20 秒後に「4:17 分で完全に満たされる」に変更し、このテキストを 10 秒間表示してから元に戻す)。
これを行うには 2 つの方法を考えました:
1)Handler
とを使用しRunnable
、テキストが変更されるたびに別の実行可能なタスクを追加します。
2) でポイント埋めを行うAsyncTask
と、その方法でテキストが変更されますonProgressUpdate
。
3)あなたが提案する他の方法(そしてそれがより良いと思う)。
事前にご協力いただきありがとうございます、
ダン