問題タブ [ui-thread]

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 に答える
1967 参照

android - ビューグループが子を描画しない

SDカードからビットマップを取得するアクティビティがあります。そのビューはカスタムビューグループに設定されます。ビットマップを含むビューをビューグループに動的に追加し、ハンドラーを使用してUIスレッドのビューグループを更新しましたが、役に立ちませんでした。ビューグループにはビットマップは表示されません。私が自分で書いたのではないが、ユーザーが画面をスワイプしてさまざまなビュー/ビットマップをロードできるようにする必要があるビューグループコード。

ビットマップがnullでないかどうかを確認し、両方のファイルのさまざまな場所にログステートメントを配置しました。ビューグループの子が描画されない理由について何かアイデアはありますか?

アクティビティ

ビューグループ

出力:

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

java - Android: x 秒後に gridview を複数回更新する

x 秒ごとに Android のビューを更新する際に問題が発生しています。

アンドロイドがどのように機能するかを知るために、私は小さなゲームを書いています。ゲームループを保持する GameController があります。ループ内でロジックが実行され、その後 GUI に変更が通知されます。

問題は、変更がビューに表示されないことです。ビューは、ゲーム ループが終了するまで同じままで、その後 1 回だけ更新されます。

これが私のコードです(重要な部分):

GameController.java:

ゲームアクティビティ.java:

TextAdapter.java:

私はたくさんグーグルして、たくさん試しました(そして、ここですでに尋ねられた同様の質問を知っていますが、どちらも私を助けませんでした)が、どういうわけかうまくいきません. ビューとロジックがAndroidの異なるスレッドで実行され、同じスレッドで実行されると、ロジックがビューをブロックすることはできません。どんな助けでも大歓迎です。

// 編集:

new Thread(c).start(); を試してみると LogCat sais: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Looper.prepare(); を追加すると、: java.lang.RuntimeException: アクティビティ ComponentInfo{GameActivity} を開始できません: java.lang.RuntimeException: スレッドごとに作成できるルーパーは 1 つだけです

this.runOnUiThread(c); を試してみると エラーはありません。

0 投票する
5 に答える
930 参照

android - Androidアプリのメインスレッドはどこにありますか?

私は次の一般的な構造を持つゲーム(「ゲーマー」という名前を付けます)を作成しました(コードは大幅に簡略化されています)。

ゲームはすべて正常に機能し、非常に堅牢でした。ここで、特定の条件をテストし、それが真である場合は、AlertDialogを作成したいと思いました。このコードをonDrawメソッド内に配置できると思いました。次に、「Looper.prepare()を呼び出していないスレッド内にハンドラーを作成できません」というメッセージが表示されました。これは、onDrawメソッドが必要ないと思われるメインスレッドによって実行されていると想定したため、混乱を招きます。何かを設定します。

テストとダイアログをメインスレッド内のどこかに移動するか(どこ?)、Looper.prepare()コードをどこかに追加することで、これを解決できると思います。

誰かが私にどちらが簡単か、そして必要なコードはどこに行くべきか教えてもらえますか?

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

c# - プロセスからの出力ストリームをキャプチャし、シンプルなウィンドウに表示します

私は少し困惑しています。私は以前にバックグラウンドワーカーと協力してきましたが、アプリ内の多くの場所にバックグラウンドワーカーがいます。何が起こっているのかを「進捗状況」で表示するために、「%complete」ではなく冗長性を使用して、単純な「ウィンドウ」を作成しました。このウィンドウには、単純なラベルがあります。バックグラウンドワーカースレッドとUIスレッドの問題により、直接アクセスできないため、ウィンドウに「セッター」があり、それは何もしません。

したがって、BGWが「ReportsProgress」を実行し、ウィンドウの「NewStatus」セッターにメッセージを渡す場合(適切なUIスレッドで動作している)。これはすべて完全に機能し、問題はありません...バックグラウンドワーカーがC#.Netアプリ内で何かを実行している場合。

次へ...いくつかのコマンド引数を指定してDOSコマンドを実行する必要がありますが、醜い黒いウィンドウを見たくありません。それで、他のスレッドから、私はそれを見つけて、完全に解決しました。問題はありません。したがって、この時点で、2つの要素(バックグラウンドワーカーがステータスを更新するウィンドウ)と(DOSコマンドを呼び出してパラメーター化されたユーティリティを実行する)の間のすべての構文と機能。

今、問題。DOSコマンドの実行中にウィンドウステータスを更新しようとしています。したがって、これにより、出力とキャプチャラインを一度にリダイレクトする「OutputDataReceived」にさらされました(これは完璧です)。

次に、DOSOutputHandlerに、

これはハングするだけで、UIスレッドのウィンドウの更新を実行することはありません。だから、私は思う... DOSコマンドをBGWスレッドにラップしてみてください...だから、私は...ほとんどすべて同じです、つまり、出力ストリームをキャプチャしているDOSコマンドから、BGWスレッドはそれを取得します。次に、その文字列値をウィンドウステータスまで転送しようとしましたが、ハングしているように見えます... UIスレッドとほぼ同じように、プロセス(独自の新しいスレッド)を呼び出しているBGWスレッドを呼び出したくありません。よく遊ぶ。

何か案は?

0 投票する
0 に答える
317 参照

java - javaの非UIスレッドでOleFrameする方法は?

使い方のアドバイスをお願いします

非UIスレッドで?非 UI スレッド スローで行われる場合は、「OleFrame」を作成します。UIスレッドと非UIスレッドの違いは知っています。私が達成しようとしているのはorg.eclipse.swt.ole.win32.OleAutomation、「IRunnableWithProgress」で使用することです

追加する

mShellコンストラクターで指定されます)各OLE呼び出しの後、少しは役立ちますが、十分ではありません...

どんな助けでも大歓迎です。

.

0 投票する
6 に答える
15786 参照

android - Android UIスレッド非同期でコードを実行する方法は?

私はAndroid開発に不慣れです。私はSwingとSWTに数年間取り組んできました。SwingとSWTはどちらも、UIスレッドの同期と非同期でコードを実行するための戦略を持っています。典型的な使用法は、時間をかけて1つのスレッドでスタッフを消費し、結果をUIスレッド非同期で表示することです。

だから私の質問は、Androidに同様の戦略がありますか?これが私のコードです。実行可能なパラメーターは、時間のかかるコードです。このメソッドは、実行中に待機ダイアログを表示し、終了後にトーストを表示することを期待します。ただし、トーストはUIスレッドで表示する必要があります。それで、それをどのように行うのですか?

そして、Android UIシステムについていくつかの言葉はありますか?スレッドセーフ、スレッドがどのように連携するかなどです。どうもありがとう!

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

c# - あるスレッドで UI スレッドにコマンドを実行させるにはどうすればよいですか


いくつかのスレッドで以下のコードがスレッドによって呼び出されたときにUIthread にコマンドを実行させるにはどうすればよいですか。そして、プロセスファンは無限ループのように高速になりました..その後、「stackoverflowexception」というエラーが表示されます

私のアプリケーションはファイルマネージャーです..(コピー、切り取り、貼り付け、新しいフォルダーなど)..およびdirRecursive(string path) ..ファイルとフォルダーをlistViewにアイコンで表示するので、次のようなことをするたびに(新しいフォルダーまたは貼り付け) listViewを更新するには、dirRecursiveを呼び出す必要があります

ノート:

  • スレッドでPasteFromCopyを実行しようとする前に、うまく機能しました..
  • 貼り付けメソッドからdirRecursive(..)行を削除するとうまく機能します..しかし、貼り付けが完了した後にリストビューを自動的に更新する必要があります..そのため、PasteFromCopy から呼び出しますが、UIThreadを使用する必要があります
  • UIThread を PASTE に使用した場合、ファイルがコピーされているときにフォームが遅れます..

    助けてください:)事前に感謝します

  • 0 投票する
    3 に答える
    597 参照

    c#-4.0 - TPL を使用して「使い捨て」オブジェクトを安全に UI スレッドに渡す

    私たちは最近、重いバックグラウンド タスクを実行するためのツールキットとして TPL を採用しました。

    これらのタスクは通常、 を実装する単一のオブジェクトを生成しますIDisposable。これは、内部にいくつかの OS ハンドルがあるためです。

    私が望んでいるのは、ハンドオーバーがアプリケーションのシャットダウンと一致する場合でも、バックグラウンド スレッドによって生成されたオブジェクトが常に適切に破棄されることです。

    少し考えた後、私はこれを書きました:

    バックグラウンドTaskで呼び出しRunOnUiThreadて、その結果を UI スレッドに渡します。タスクtは UI スレッドでスケジュールされ、data渡されたものの所有権を取得しtます。UI スレッドのメッセージ ポンプがシャットダウンされたために実行できなかった場合、継続が実行されると予想していましたが、タスクに失敗し、自分でオブジェクトを破棄します。DisposeObject()オブジェクトを破棄する前に、オブジェクトが実際に IDisposable であり、null でないかどうかをチェックするヘルパーです。

    残念ながら、うまくいきません。バックグラウンド タスクのt作成後にアプリケーションを閉じると、継続が実行されません。

    以前にこの問題を解決しました。当時、私は Threadpool と WPF Dispatcher を使用して UI スレッドにメッセージを投稿していました。あまりきれいではありませんでしたが、最終的にはうまくいきました。このシナリオでは TPL の方が優れていることを期待していました。IDisposable を実装している場合は、残りの AsyncState オブジェクトをすべて破棄する必要があることを TPL に教えることができれば、さらに良いでしょう。

    したがって、コードは主に問題を説明するためのものです。Disposable オブジェクトをバックグラウンド タスクから UI スレッドに安全に引き渡すことができるソリューション、できればコードをできるだけ少なくするソリューションについて学びたいと考えています。

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

    android - doinbackground で ASynchTask がスリープし、UI スレッドをロックする

    編集:解決しました。申し訳ありませんが、データの読み込みがバックグラウンド スレッドで行われているときに、データを解析するコールバックがそうではないことに気付きました。データの解析には非常に長い時間がかかり、それがスレッドをロックしていました。

    編集: 私の包括的な問題 (ProgressDialog が回転しなくなった) は、UI スレッドがブロックされているのではなく、ProgressDialog の使用の問題が原因である可能性があることに気付きました。その場合、どうすれば修正できますか?

    編集:明確にするために、これはプログラム全体を永久にロックしません。すべてがロードされると、進行状況ダイアログは閉じられ、新しいアクティビティが表示されます。私の問題は、ロード中にUI全体がロックされることです(つまり、進行状況ダイアログの回転が停止します)

    TL;DR: doInBackground() の Thread.sleep() が UI スレッドをロックしています

    特定のアクティビティが開始されると、バックエンドから大量のデータ (スケジュールに関連する大量のデータなど) をバックグラウンドでロードし始めるアプリがあります。この情報はすぐには使用されませんが、ユーザーがアクセスしようとすると (つまり、スケジュール ボタンをクリックしてスケジュール アクティビティを起動することにより) 使用される可能性があります。

    ユーザーが少し待ってからスケジュール ボタンをクリックすると、すべてのデータが読み込まれ、スケジュール アクティビティが開き、すべてが表示されます。私の問題は、データが読み込まれる前にボタンをクリックした場合です。

    ここでの私の解決策は、データの読み込みが完了したかどうかを定期的にチェックし、それ以外の場合はスリープしている間に ProgressDialog を表示する ASyncTask を作成することでした。アプリケーション全体のブール変数を介して、データのロードが完了したことを認識しています。私の問題は、Thread.sleep() が doinbackground() 内で実行されていても、UI スレッドをロックしていることです。

    以下に定義するカスタム ASyncTask を使用しています。

    そしてそれを(例えば)経由で呼び出します:

    (読みやすくするために、グローバル変数へのアクセスを「loadingSchedule」に短縮しました)

    これをUIスレッドをロックしないようにするにはどうすればよいですか?

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

    android - Android アプリ: UIThread が 5 秒以上ブロックした後、「アプリケーションが応答していません」と表示されますか?

    Android Developer Site で次のように述べていますUIThread。代わりに、別のスレッドで実行する必要があります。このサイトでは、彼らはまだ言います:

    UI スレッドが数秒以上 (現在約 5 秒) ブロックされている場合、ユーザーには悪名高い「アプリケーションが応答していません」(ANR) ダイアログが表示されます。

    このステートメントをテストするために、証明を行います。これが私のコードです:

    ご覧のとおり、現在のスレッド ( UIThread) を 8 秒間スリープさせます。したがって、このアプリを実行すると、Android は「アプリケーションが応答していません」と気付くと思います。しかし、私はエラーが表示されません。プログラムはスムーズに実行されます (「待機終了」というテキストも表示されます)。

    それで、誰が私のコードについて説明してくれますか。私が作ったなんて間違ったことをしてください。

    ありがとう :)