問題タブ [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 投票する
1 に答える
881 参照

android - UiThread android の MessageQueue を強制的にフラッシュする

できるだけ早くコンテンツをディスプレイにフラッシュしたいのですが、UI スレッドに設定したいセットアップ コードに時間がかかりすぎています。すべてが完了するまで、画面には何もレンダリングされません。

したがって、少なくとも 100 ミリ秒の遅延で View.postDelayed(Runnable, long) を実行すると、セットアップが開始される前にレイアウトがレンダリングされます。私がやりたいのは、onResume (たとえば) で画面にレイアウトをレンダリングしてから、セットアップを続行することです。

私が探しているのは、ルーパーが MessageQueue を空にし、このメソッドが呼び出されるまですべてをレンダリングしてから、メッセージの処理を続行することを確認する方法です。

おそらくバックグラウンド スレッドでセットアップを実行する必要がありますが、これは他のことを複雑にします。

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

android - AsyncTaskcancelメソッドがハンドラエラーをスローする

ボタンでAsyncTaskを開始し、別のボタンで停止するという単純なアクティビティがあります。

AsyncTaskでは、LocationListnerを使用してGPSセンサーから更新を取得し、取得したロケーション間の距離を計算します。

スタートボタンを押すと、新しいスレッドが作成され、コードは正常に機能します。デバッグの観点から、GPSの更新が定期的にキャッチされ、それに応じて変数が更新されていることがわかります。

しかし、キャンセルボタンを押すと問題が発生します。ドキュメント(http://developer.android.com/reference/android/os/AsyncTask.html)で、doInBackgroundコードが終了したときにcancel()メソッドがonCancelled()を呼び出す必要があることを読みました。そのため、私は次のように述べています。

doInBackgroundメソッド全体で、私がそれから抜け出すことを望んでいます。残念ながら、私はその部分にさえ到達しません。終了ボタンを押すと、次のエラーが発生します。

任意のアイデア、このエラーの背後にあるもの。これが完全なコードです。(ビルドターゲットはAndroid 4.0.3です)。コードはHTCOneVでテストされています。

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

android - 放送受信機と乾杯

全て、

レイアウトやアクティビティが関連付けられていない放送受信機があります。オーディオジャックから何かを抜く人がいるのを聞いています。

受信機を動作させて通知を出すことができました。私の質問は、メインアクティビティまたはメインレイアウトを持たないレシーバーを使用してトーストメッセージを表示するにはどうすればよいですか?

Toastを機能させるにはルーパーが必要なため、基本的にこれを実行できないという投稿を1つか2つ見つけました。Android+SMSレシーバー+トースト=失敗

私はこのリンクhttp://developer.android.com/reference/android/os/Looper.html以外のルーパーに精通していません。

レシーバーがトリガーされたときにトーストを上げることができるように、ワーカースレッドにルーパーを持つブロードキャストレシーバーのonReceiveメソッドからIntentServiceを作成する方法はありますか?

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

android - Android で Looper を使用する必要があるのはいつですか?

ハンドラーでルーパーを使用する必要がある場合に誰か教えてもらえますか? 複数のスレッドとハンドラーがあるコードベースがあります。しかしLooper.prepare()Looper.loop()それらすべてに対して呼び出されるわけではありません。

handleMessage メソッドでメッセージを継続的に処理するためにルーパーが必要なのだろうか? ルーパーがなくても、メッセージがハンドラーに送信されたときに handleMessage() は呼び出されませんか? ここで Looper が提供するその他の目的は何ですか?

ありがとう、シャミー

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

java - AlertDialog: ダイアログを表示した後、バックグラウンド キャンバスのレンダリングは続行されますが、ダイアログは決して閉じません

これは、私の AlertDialog の無応答状態のスクリーンショットです。

ダイアログが応答しないことを示す DDMS のスクリーンショットですが、レンダリング スレッドは引き続き実行されます。

背景では、緑色のタイル、白黒のターゲット内の赤いボール、3 つのビットマップすべてが、携帯電話の背景キャンバスをロック/ロック解除するレンダリング スレッドで継続的にレンダリングされます。この応答しないアクションは、EditText に入力したテキストに関係なく、[OK] ボタンを押すと常に実行されます。

コードは次のとおりです。

PlayActivity クラス:

理由は不明ですが、AlertDialog.show() が呼び出される前に準備された Looper が存在する場合にのみ、AlertDialog が実行されます。

問題は、AlertDialog.show() が呼び出された後、および Looper.quit() が呼び出された後、AlertDialog が何らかの理由で終了せず、電話が応答しなくなることです。

そして、onClick() メソッドで PlayActivity.this.finish() を呼び出すと、ダイアログを終了し、バックグラウンド レンダリングを停止し、メイン メニューに戻ることができます (これが私の望みでした) が、Eclipse DDMS は次のように報告します。

つまり、finish() を呼び出して PlayActivity を終了しようとすると、AlertDialog がリークします。この問題を解決するために他に何をすべきかわかりません。

私を助けてください。ありがとう!さらにソースコードが必要な場合は、お知らせください。

編集:

Leak エラーが表示される直前に、DDMS がログに記録したのは次のとおりです。

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

multithreading - インテントを使用して最初のアクティビティによって開始された二次アクティビティのハンドラーを取得する方法は?

プロジェクトにメイン アクティビティがあり、そこからインテントを使用してセカンダリ アクティビティを開始しています。別のスレッドで、2 番目のアクティビティにいくつかの制御メッセージを送信するための 2 番目のアクティビティのハンドラを取得したいと考えています。インテントを使用して開始した 2 番目のアクティビティのハンドラーを受け取るにはどうすればよいですか?

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

android - Android Handler.getLooper() が null を返す

次の問題があります。ルーパーを使用したスレッドのこの実装があります。

}

そして、私は次のことをしたいと思います:

lm は LocationManager です。私のログとテストからlocationThread.handler.getLooper()、ルーパーの代わりに null を返すと言えます。

なぜそれがヌルなのかわかりません。locationThread.isAlive()trueを返したものを呼び出そうとしました。locationThread.handler;また、null ではないことがわかっているものを取得しようとしました。私もたくさんのグーグルをしましたが、ドキュメンテーション以上のものは見つかりませんでした。

ご回答ありがとうございます。

0 投票する
3 に答える
4407 参照

android - スレッド、looper.prepare を呼び出さないスレッド内でハンドラを作成できません

呼び出しようとすると、「looper.prepare と呼ばれていないスレッド内でハンドラーを作成できません」というエラーが表示されます。

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);

ただし、スレッド内で呼び出さない場合 ( run() ) は正常に動作します。どうすればよいですか?

編集: MyAlarmService.java

GetAlarmCoordinates.java

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

android - ループからの Asynctask が 2.3 以前でエラーを出す

最近、経験豊富な人にとっては簡単に見えるかもしれないが、私には理解するのが非常に難しいエラーに遭遇することが増えています。

X 分ごとに新しいフィード エントリをチェックするバックグラウンド サービスを作成しようとしています。したがって、私はサービスからループを開始しています。そのループは asynctask を作成します。

私の 4.1 フォンでは魅力的に動作しますが、私の 2.3 エミュレーターでは次のように強制終了します。

これは通常、UI 以外のスレッドで UI を実行しようとしていることを意味しますが、そうではありません。実際、ASyncTask のすべてのアクティビティをコメントアウトしても、強制的に閉じられます。ループを開始する行をコメントアウトすると、強制終了が停止するだけです

これは私の 2.3 エミュレーターでのみ発生し、私が使用している 4.0 スタイルの通知とは関係ありません。

誰かがこれについてもっと知っていますか?

ありがとう!

edit -> Looper.prepare() を呼び出すと、スレッドごとに 1 回だけ発生する可能性があるというエラーが表示されます。