Похоже, что вы обновляете свой WebView каждые 20 секунд и открываете новое диалоговое окно прогресса, когда вы это делаете.Ваш код предполагает, что старый диалог прогресса уже был закрыт.Если это не так, то диалоговое окно прогресса просто осиротело и останется на дисплее навсегда.Вы, вероятно, можете это исправить, вставив этот код:
if (progressBar != null && progressBar.isShowing()) {
progressBar.dismiss();
}
непосредственно перед строкой progressBar = ...
.
Но я бы не стал так исправлять ваш код.Вы делаете огромную работу, которая вам не нужна.(Например, вам не нужно перезагружать то же представление контента.) Вот моя пересмотренная версия:
private final Runnable m_Runnable = new Runnable() {
public void run() {
doRefreshingStuff(id);
mHandler.postDelayed(m_Runnable, 20000);
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialitions
setContentView(R.layout.web4);
webView7 = (WebView) findViewById(R.id.web_4_1);
webView7.getSettings().setJavaScriptEnabled(true);
webView7.getSettings().setJavaScriptEnabled(true);
webView7.setWebViewClient(new WebViewClient() {
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (!mProgressBar.isShowing()) {
mProgressBar.show();
}
}
public void onPageFinished(WebView view, String url1) {
if (mProgressBar.isShowing()) {
mProgressBar.dismiss();
}
}
});
mProgressBar = new ProgressDialog(this);
mProgressBar.setTitle("example");
mProgressBar.setMessage("...");
mHandler = new Handler();
}
protected void onResume() {
super.onResume();
mHandler.post(m_Runnable);
}
protected void onPause() {
super.onPause();
mHandler.removeCallbacks(m_Runnable);
}
public void doRefreshingStuff(String id) {
url="my url";
webView7.loadUrl(url);
}
Обратите внимание, что я переместил начало цикла загрузки страницы в onResume()
и уничтожил циклв onPause()
.Возможно, вам нужна немного другая логика, но вам определенно следует как-то прекратить зацикливание, когда ваша деятельность приостанавливается или заканчивается.