問題タブ [android-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.
java - ルーパー - ハンドラー - スレッド
そのため、一見非同期のタスクを実行し、典型的なコールバック/リスナー モデルを使用してコールバックを受信するコードを使用しています。
私の問題は、操作を呼び出したスレッドを保持すると、コールバックが起動しない場合があることです。
次のコード スニペットを検討してください。
の内部でdoAsync()
は、ハンドラとmain looper
.
私がこのコードを呼び出すことを考えると、Thread A
誰かがThread A
この呼び出しの直後にブロックした場合の影響を概説してください。
また、ハンドラを実行するとどのような影響がありmain looper
、local looper
上記のコールバックが実行されるスレッドが決定されますか? Thread A
ブロックするとコールバックが実行されないため、これを尋ねます。
android - Looper.loop() を使用しているときにスレッドを停止するには?
このトピックに関連するほとんどすべての質問を読みましたが、スレッドを「終了」するまではすべて完璧です。
これが私が試したコードです。そして、「メインスレッドは終了できません」というメッセージが表示されます。条件が満たされた時点でスレッドを終了したいだけです。
android - HandlerThread の開始後に getLooper() が null を返す
クラス extends がHandlerThread
あり、次のようになります。
上記のように、prepare()
関数はスレッドを開始し、run()
終了するのを待ってから、ルーパーを取得しようとします。
別のクラスで、インスタンスを作成してMyHandlerThread
開始します。
コンソールに表示されるログ:
関数内で、スレッドが既に開始されている (実行されている)にもかかわらずprepare()
、呼び出しがnullgetLooper()
を返すのはなぜですか?run()
android - 強制停止の対処方法
Android アプリケーションで強制停止を処理する方法を知りたいです。アプリケーションには、次のようにアクティビティ内に asynctask クラスが含まれています。
アプリケーションは例外なく実行されますが、ユーザーが (Samsung Galaxy S5 のホーム ボタンの左側にあるメニュー ボタンを使用して) 強制停止した後、アプリケーションを再度開くと、進行状況ダイアログ メッセージが表示されます。しばらくお待ちください」が asynctask の onPreExecute メソッドにあり、無限にハングします。
デバッグすると、アプリケーションが Looper クラスのループ メソッドでハングすることがわかりました。
アプリケーションがこの無限ループから抜け出すにはどうすればよいでしょうか?
ありがとうございました。
よろしくお願いします。
android - NotifyBuilder の java.lang.RuntimeException
私はこのコードを持っています.2つの異なるアクションが必要です.MainActivityを開くための1つの古典的な通知とLogoutTaskを行うための別の通知を表示したいのですが,私はこのjava.lang.RuntimeException: Can't create handler inside threadを持っていますLooper.prepare() を呼び出していない
私の NotificationBuilder、AsyncTask、およびエラーを示します。
通知方法
非同期タスク
エラー
12-10 11:09:53.486 19138-19390/it.penta.kleim E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3 プロセス: it.penta.kleim、PID: 19138 java.lang.RuntimeException: Can't create handler inside Looper.prepare() を android.os.Handler.(Handler.java:200) で android.os.Handler.(Handler.java:114) で android.app.Dialog.(Dialog.java: 119) android.app.AlertDialog.(AlertDialog.java:200) android.app.AlertDialog.(AlertDialog.java:196) で android.app.ProgressDialog.(ProgressDialog.java:82) で it.penta.kleim.sixteen.retro_asynctasks.DoLogoutTask.(DoLogoutTask.java:44) it.penta.kleim.sixteen.retro_gcm.MyGcmListenerService.sendNotification(MyGcmListenerService.java:107) で it.penta.kleim.sixteen.retro_gcm.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:75) で com.google.android.gms .gcm.GcmListenerService.zzq (不明なソース) com.google.android.gms.gcm.GcmListenerService.zzp (不明なソース) com.google.android.gms.gcm.GcmListenerService.zzo (不明なソース) com.google.android. java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) で com.google.android.gms.gcm.GcmListenerService$1.run(未知のソース) でutil.concurrent.java.lang.Thread.run(Thread.java:818) で ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
android - javaのルーパーとルーパーのないスレッド、およびルーパーを停止する正しい方法は?
私の質問は、Java ルーパーと、それらを正しい方法で停止する方法に関するものです。
次のようなスレッドが定義されているとしましょう。
そして、私はほぼ同じですが、ルーパーを備えた別のスレッドを持っています:
もしそうなら:
new NoLooperThread().start();
私は2秒後にこのスレッドが死ぬ可能性があることを知りたいのですが、もしそうなら: new LooperThread().start(); スレッドは永遠にブロックし続けますか? 私の仮定は正しいですか?
どうすればこのスレッドを停止できますか? ブロッキングを停止するために電話する必要があることはわかっLooper.myLooper().quit();
ていますが、それを行う最善の方法は何ですか? ハンドラーを介してメッセージを送信して停止する必要がありますか?
したがって、ルーパーの目的は 2 つあります。メッセージ キューを作成するだけでなく、スレッドを存続させます。その仮定も正しいですか?
SO question hereを読んだ後、私の質問が来ます