問題: Android WebView 内に Web ページをプリロードし、Activity の準備が整ったときにそれを Activity にアタッチしたいと考えています。Web ページをロードするトリガー ポイントは、実際のアクティビティが作成される前です。したがって、次の方法でサービスに webview オブジェクトを作成します。
MutableContextWrapper contextWrapper = new MutableContextWrapper(serviceContext.getApplicationContext());
this.webView = new WebView(contextWrapper);
この Web ビューを表示する必要があるアクティビティが作成されたら、フレームレイアウトを作成し、子ビュー、つまりこの Web ビューを追加して、setContentView を呼び出します。このようにして、私のウェブビューはウェブページにプリロードされて表示されます。私はまた、次のことを行います
contextWrapper.setBaseContext(CurrentActivity.this);
これは、上で指定したものと同じ ContextWrapper オブジェクトです。この後も、webview は、通常のユース ケースで描画できる Javascript アラートを描画しません。
私がするときでさえ
ContextWrapper contextWrapper = new ContextWrapper(CurrentActivity.this);
this.webView = new WebView(contextWrapper);
this.webView.loadUrl(someUrl);
WebView は JS アラートをポップアップできません。ログに Exception タグや Fatal タグすら表示されません。WebView は、その上にウィンドウを描画できません。
これは、現在のアクティビティのコンテキストで webView を直接作成するという通常の方法で正常に機能します。
this.webView = new WebView(CurrentActivity.this);
this.webView.loadUrl(someUrl);
私が知っている限りでは、http://developer.android.com/reference/android/content/ContextWrapper.htmlは、コンストラクターで渡されたものと同じ操作を、保持している基本コンテキストに対して実行するだけです。
私のユースケースはこのようなものです。http://developer.android.com/reference/android/content/MutableContextWrapper.htmlを渡して webView オブジェクトを作成します。MutableContextWrapper は、何らかのアクティビティのコンテキストを保持するか、アプリケーション コンテキストを保持できます。WebView を表示する必要がある実際のアクティビティが開始されると、MutableContextWrapper 内でコンテキストを切り替え、フレーム レイアウトと setContentView に配置して WebView を表示します。基本的に、ページの読み込みを開始するトリガーは、アクティビティが作成される前であるため、ページを webview に事前に読み込み、作成時にアクティビティにアタッチするだけです。