タイトルが示すように、私のアクティビティ テスト ケースは次のようにクラッシュします。
Test run failed: Instrumentation run failed due to 'android.view.WindowManager$BadTokenException'
アクティビティでダイアログが再生成されたとき。Sky A820L ではすべてのテストが正常に実行されますが、Samsung Galaxy S3 でテストするとすべてがうまくいきません。グーグルで検索したところ、ハンドラーを使用してダイアログを処理することを提案している人がいますが、アプリケーションのソース コードを変更することはできません。この問題を解決する方法はありますか?
ありがとうございます!
編集 1: コードがダイアログを使用する場所がいくつかあります (このアプリはサーバーからデータをロードするため、ロードするたびに進行状況ダイアログをポップアップしてデータを待ちます)。したがって、アクティビティがテストを開始するたびに、継続的に開始および停止します (テスト ケースごとに、アクティビティが再び開始されます)。問題がここに投稿されているのを見ました: https://code.google.com/p/android/issues/detail?id=14616 しかし、これに対する解決策はありません。アプリケーションコードは次のとおりです。
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
this.dialog = new ProgressDialog( this );
this.dialog.setMessage( "Sending data, please wait..." );
//something else
}
protected void onRequestData()
{
this.dialog = ProgressDialog.show( this, "", "Loading, please wait...", true, true );
}
ご覧のとおり、アクティビティが開始されるたびに新しいダイアログが作成され、データを再度要求する必要があるため、ダイアログを呼び出すメソッドが内部にあります。問題なく正常に実行されることもありますが、ほとんどの場合、エラーが発生します。