2016-10-26 27 views
1

私のアプリケーションでは、迷​​惑な動作があります。それは私のcostumersに問題を引き起こしています。モーダルダイアログが表示されません

このアプリケーションには、ダイアログ(モーダル)を表示する必要があるいくつかのポイントがあり、ユーザーはいくつかのフィールドを入力してからダイアログを閉じることができます。したがって、システムはその自然な経路に従います。

決まった瞬間に、これは問題なく動作します。ダイアログが表示され、ユーザーはそのユーザーと対話して閉じます。

しかし、他のモーメント(同じコード)では、ダイアログは自動的に表示されません。ユーザーは、デバイス上で何らかの外部アクションを実行する必要があります(向きを変更する、画面の中央をタッチする、スクロールジェスチャーを実行するなど)。現時点では直感的ではないアクションです。 この現象は、ユーザーが私のアプリが凍っていると思うようになります。 私にとって、ダイアログが呼び出されたことは明らかです。単に画面に描画されなかっただけです。

私はこの問題について読んでみました。私は同様の質問でいくつかの研究を成功させました。 私は原因がEDTに関係していると思います。

要するに、私はEDTルールを破ることなくダイアログモーダルを呼び出すことができます。 さらに具体的には、この問題をどのように解決できますか。 画面にダイアログを表示するように要求すると、100%のケースで本当に表示されます。今日はランダムに動作します。

追加情報: 私のアプリはまだJava 5を使用しています。 Java 8への移行をお勧めしますか?

=======追加情報(1)===========

この問題は、デバイスモデルの強く依存しています。 MotoG3(Android 6)ではこの問題は例外です。まれに起こります。 私のギャラクシーノート8では逆です。常に発生します。 Lenovo Vibe5(Android 6)の場合。頻繁に発生します。 これらの情報を追加しました。多分問題の写真を合成するのに役立つでしょう。

その他の質問: テンプレートとして使用できるスニペットを書くことは可能ですか EDTのいくつかのルールを破棄せずにダイアログモーダルコールを実行するにはどうすればよいですか?

+0

はい、Java 8に移行してください。最後のjava 5リリースは7年前です。しかし、それは痛みになるだろう... –

+0

あなたのコメントありがとうございました。 – hrugani

答えて

0

このような問題を検出するシミュレータのEDT違反検出ツールをオンにします。 Dialogコールの問題の可能性があるケースを調べて、問題の修正方法がわからない場合は特に送信してください。

プロジェクトの移行は重要ではありませんが、Java 8は無関係です。

+0

こんにちは。 シミュレータの使用その問題では処理できません。 JavascriptとJavaの間の双方向通信は機能しません。 (私も理由は分かりませんが、これは別の問題です)。 adb(Android-sdkから)を使用し、logcat-deviceから直接EDT違反にアクセスできますか?双方向通信は、アプリケーションが物理デバイス上で実行されているときに正常に動作します。 この問題はjavascriptから呼び出されるJavaコードで発生します。 – hrugani

+0

JavaScriptから呼び出されるJavaコードは、おそらくネイティブブラウザのスレッドで呼び出されます。 UIと対話するには、callSerially()が必要です。 –

+0

私はこれをしました。私は既にDisplay CallSerially()を使ってDialogを呼び出そうとしました。結果は悪かった。次のメッセージを含むEDT違反を報告する例外:内部アプリケーションエラーが発生しました:java.lang.RunTimeException:このメソッドはEDTで呼び出されてはいけません。 – hrugani

関連する問題