問題タブ [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.
handler - Android LooperハンドラーhandleMessageは、メッセージを送信した後に呼び出されません(HTC EVO 3D)
非常に奇妙な問題が発生しています。HTCEVO3Dでは、メッセージがルーパーのハンドラーに送信された後、ルーパーがhandleMessageを呼び出さないことがあります。それは2回起こり、再現するのは非常に困難です。初めて捕まえたのは8時間のストレステストの後です。エラーや例外はありませんでした。ただし、メッセージがルーパーに正常に送信されたかどうかは出力しませんでしたが、ルーパースレッドはまだ生きていて、デバッガーを介して実行されていると確信しています。
私は半年以上まったく同じメカニズムを使用しましたが、問題はありませんでした。誰かが同じ問題に遭遇するのだろうか?デバイスの問題ですか?
ありがとう、
サイモン
android - Service/IntentService/AsyncTask/Looperのキャンセル方法
私はここで発狂します。簡単なことをしたい - 長いタスク (Web から複数のデータ オブジェクトをフェッチする) があり、それをキャンセルする機能が必要です。私はたくさんのことを(たくさん)試しましたが、何もうまくいきません
流れは次のようになります。
ユーザーがボタンをクリックする
AsyncTask
作業を開始します ( 、Service
、IntentService
およびで試しましたLooper
)タスクは、進行状況の更新に関する進行中の通知を追加することを含め、すべてを処理します
通知の意図には、進行中のタスクをキャンセルすることだけが目的であるという新しいアクティビティの呼び出しがあります。
stopService()
cancelActivityで Service/IntentService を呼び出そうとしたりLooper.quit()
、Looper を実行しようとしました (AsyncTask で何を試したか覚えていません。キャンセルするための API があるかどうかはわかりません)。
私の観点では、最良のオプションは使用することですIntentService
(いくつかのタスクを並べることができ、IntetService は希望どおりにそれを実行します)が、あらゆるタイプの実装の提案を受け入れます-私は何を気にしませんコードは、タスクをキャンセルするオプションがあるというだけです
よろしくお願いいたします。
ドロール
(私は寝ます - 同じ問題で8時間は多すぎます)
pthreads - タイムアウトになる前に ALooper_pollAll を終了する方法
私の 内で、負のタイムアウト値で をandroid_main
呼び出して、イベントが発生するまで無期限に待機するようにします。ALooper_pollAll
ただし、このブロックされた状態を (イベントの発生を待たずに) 手動で終了できるようにする必要がある場合があります。
これを達成するALooper_pollAll
ために、イベントを待っている 間に、別のスレッドから次の呼び出しを試みました。
ALooper_wake( ALooper_forThread() )
ただし、これによりセグメンテーション違反が発生します。
ALooper_pollAll
タイムアウトになる前に手動でブロックを解除する方法はありますか?
android - サービス、オブザーバー、ルーパー
リモートサービスにコンテンツオブザーバーを含むアプリケーションを作成しようとしていますが、エラーが発生し続けます:
「Looperprepareを呼び出さなかったスレッド内にハンドラーを作成できません」
私はAndroidDevelopersサイトで多くの読書をしましたが、多くのGoogle検索もまだ問題を完全には理解していません。これまでのところ、コンテンツオブザーバーを実行するには(ハンドラーの)スレッドが必要です。追加後:
Looper.myLooper().prepare();
mObserver = new Observer(new Handler());
新しいコンテンツオブザーバーを作成する直前にLooperを呼び出すと、アプリケーションが正しく機能します。しかし、これがなぜであるかをよりよく理解したいと思います。オンラインで見つけたものは、これまでのところ理由を理解するのに役立ちませんでした。また、コードのLooper行を追加することは、正しく効率的なことですか?そして、後でメモリリークを防ぐために、これを使ってクリーンアップする必要がありますか?
説明は簡単な方がいいです。まだAndroid開発の最初の月で、順調に進んでいます-StackOverflowは大きな助けになりました!ありがとう。
更新
遊んでもっと読んだ後、私はこの作品を作る方法とそれをきれいにする方法をよりよく理解していると思いますが、それでも1つの小さな部分が欠けています。
私が集めたものから、静的メソッドとしてLooper.prepare()を呼び出すことができます。次に、新しいHandler()を使用してコンテンツオブザーバーを作成できます。このコンテンツオブザーバーを停止したい場合は、mLooper = Looper.myLooper.getThread()を使用してオブジェクトのスレッドを取得してから、mLooper.quit()を実行できます。ただし、必要なのはいつですか。また、なぜmLooper.loop()を呼び出すのでしょうか。
UPDATE 2
さて、ここで私が取り組んでいる問題です。アプリケーションは社内にあり、説明するのは少し複雑ですが、これが私のベストショットです。
ネットワークデータを送受信するリモートサービスを実行しています。メッセージタイプはデータで定義されているため、電話の正しいデータベースに送信できます。実行中のサービスに接続するためにインポートする他のAPK用のJarインターフェースファイルがあります。これらのAPKは、関心のある新しいメッセージが受信されたときにブロードキャストを受信するように登録できます。これを行うために、コンテンツオブザーバーはAPKが使用するコンテンツURIに登録されます。したがって、新しいデータがデータベースに追加されると、コンテンツオブザーバーはブロードキャストを送信して正しいAPKにアラートを送信します。その後、APKは必要に応じてこれを処理できます。
したがって、新しいコンテンツオブザーバーのパラメーターとしてnullを使用しても問題ありませんか、それとも新しいHandler()を使用してこのオブザーバーのスレッドを作成する方がよいでしょうか。
スレッドを作成しようとしましたが、これまでのところ機能していません。Looper.loopを開始していないためだと思います(これによりサービスがフリーズします)。アドバイスをいただければ幸いです。前もって感謝します。
android - Android コード セグメントがブレークポイントなしで実行されない (スレッド)
ブレークポイントがないと実行されないコードがあります。私の推測では、コードの実行が速すぎて、ブレークポイントを続行できるようにするまでの時間により、スレッドがコードにロックオンされます。また、私の例外処理で「キャッチ」されないので、悪いコードではありませんが、ブレークポイントがあると、さらに試行に飛び込み、やりたいことをすべて実行します
デバッグモードにせずにこれを機能させる方法がわからない! 私は wait() または sleep() 関数を検討していますが、それはばかげた回避策のようです。より良い方法があれば教えてください
洞察力に感謝!
android - TimerTask、Geolocation、Looper
アプリケーションで次のロジックを実行する必要があります。毎分、GPS位置を20秒間リッスンして、GEO位置の修正を取得できるようにします。
これは明らかに、UIスレッドとは異なるスレッドを実行する必要があります。
しかし、私はルーパーとタイマータスクを組み合わせて使用することにいくつかの問題があります...
これを達成するための最良の方法は何ですか?
android - スレッドごとに作成できるルーパーは1つだけですエラー、非同期タスク
この投稿の下部にあるコードは、次のコード行によってトリガーされます。
以下のコードのdoInBackground部分は、forループを含むメソッドを呼び出すため、Looper.prepare()が必要です。
このコードは、呼び出された最初の数回は正常に実行されますが、その後、次のエラーがスローされます。
10-15 22:50:24.752:エラー/ AndroidRuntime(9258):原因:java.lang.RuntimeException:スレッドごとに作成できるルーパーは1つだけです
Looper.getMainLooper()。quit();を入れてみました。AsyncTaskのさまざまな部分でこのような他のいくつかのものがありますが、これはすぐにクラッシュするだけです。
ヘルプはありますか?
コード:
android - MonoDroid Looper.MyQueue() が一部のアクティビティでハングする / アイドル ハンドラー?
Looper.MyQueue().AddIdleHandler()
アプリがアイドル モードのときに、MonoDroid を使用していくつかのコマンドを実行しています。これは1つのアクティビティで機能していますが、2番目のアクティビティを開始すると、画面に触れるか最初のアクティビティを再開するまでハングします。2 番目のアクティビティでキューをブロックする可能性のあるループやものはありません。ルーパーがハングしないようにするにはどうすればよいですか?
メッセージ キューが何かによってブロックされていませんか? アイドル ハンドラーが動作していないアクティビティでは、OnTouch イベントが登録されます。
または、モノドロイドのアイドルハンドラーを実装する別の方法を知っている人はいますか?
android - AndroidAsyncTaskダイアログアラート
サーバーに新しいコンテンツがあるかどうかを確認するスプラッシュ画面があります。showの場合、AlertDialogをアプリのユーザーに表示して、ユーザーのアクションに応じて、つまり、YESの場合はサーバーから新しいコンテンツをダウンロードし、NOの場合はサーバーからアプリのコンテンツをロードしてデータベースに取得します。
ただし、AsyncTask内でアラートダイアログを使用できません。私のスニペットコードは次のとおりです。
編集済み
だからで
android - スレッド内の WebView を作成できません
私はいくつかのビューを作成し、それらを表示する準備をするいくつかのスレッドを持っています。その中には WebView もあります。このコードはスレッドで実行されます。
次の例外がスローされます。
シンプルなボタンを作成するとすべて問題ないため、これは少し奇妙です。では、WebView の作成時にこの例外が発生する理由と、Looper.prepare()
ここで役立つ場合は誰でも説明できますか? 前もって感謝します!