WebView加载页面Android

时间:2013-10-09 16:51:01

标签: android multithreading webview

我的应用程序首先在onCreate上将网页加载为WebView。我应该将它扩展到一个新的线程,因为它可能会挂起一点?或者至少是一种表明页面仍在加载的方法。它偶尔会显示为白色几秒钟。

另外,有没有办法阻止页面在方向更改时重新加载?

3 个答案:

答案 0 :(得分:1)

webview处理线程本身,因此您无需担心这一点。

您可以在页面启动和完成加载时注册回调。这取决于你建立一个进度条,或任何你想要的。有关详细信息,请参阅WebChromeClient.onProgressChanged()。这是一个good post,提供了一些细节。

您可以在清单中添加一些内容,告诉系统您不关心方向更改。将以下内容添加到您的活动定义中

android:configChanges="orientation"

另一种选择是将您的应用锁定在一个方向或另一个方向,

android:screenOrientation="portait"

答案 1 :(得分:0)

广告1。 I have not (and should not) do that in separate thread.

WebView进度条 - Android WebView progress bar

广告2。您可以通过在清单中声明android:screenOrientation="portait"的{​​{1}}或"landscape"来阻止方向更改。

答案 2 :(得分:0)

您应该使用进度对话框。显示对话框,直到将网页加载到WebView。

public final class MyWebview extends Activity {

 private static final int DIALOG2_KEY = 1;
 private ProgressDialog pd = null;
 private static final String  AmitBlog="YOUR URL";
 private WebView webView;
 @Override
 protected void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);
  pd = new ProgressDialog(this);
  webView = (WebView) findViewById(R.id.webview);
  webView.setWebViewClient(new HelpClient());
  webView.getSettings().setBuiltInZoomControls(true);

  /** Showing Dialog Here */
  showDialog(DIALOG2_KEY);
 }

 @Override
 protected void onResume() {
                super.onResume();
  LoadView();
 }

 private void LoadView()
 {
  webView.loadUrl(AmitBlog);
 }

 /** Its very important while navigation hardware back button if we navigate to another link .Its like a Stack pop of all the pages you visited in WebView */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   if (webView.canGoBack()) {
    webView.goBack();
    return true;
   }
  }
  return super.onKeyDown(keyCode, event);
 }

/** WebViewClient is used to open other web link to the same Activity. */

  private final class HelpClient extends WebViewClient {
  @Override
  public void onPageFinished(WebView view, String url) {
   setTitle(view.getTitle());

   /** Dismissing Dialog Here after page load*/
   dismissDialog(DIALOG2_KEY);
  }

  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
   if (url.startsWith("file")) {
    return false;
   } else{
    view.loadUrl(url);
    return true;
   }
  }
 }

 @Override
 protected Dialog onCreateDialog(int id) {
  switch (id)
  {
  case DIALOG2_KEY:
  {
   pd.setMessage(getResources().getString(R.string.Loading));
   pd.setIndeterminate(true);
   pd.setCancelable(false);
   return pd;
  }
  }
  return null;
 }
}