我是一个小应用程序,只持有webview。我正在使用网址加载网页视图。但当我的应用程序退出后台并返回时,webview正在重新加载,对我而言,它不应该发生。当应用程序在iOS和Android中进入后台时,如何停止webview重新加载。
注意: safari(iOS)和chrome(Android)都会使用相同的网址处理该事件,即使它们已经过去了。他们没有重新加载webview或数据。
这是我的代码,我还需要添加更多内容:
的iOS:
NSURL* url = [NSURL URLWithString:ip];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
机器人:
String url = "http://"+ip+":8081";
webView.loadUrl(url);
答案 0 :(得分:2)
重新加载App有几个原因。
<强>的Android 强>
如果在onCreate()
进入Activity
状态时将代码置于stop
方法中,并且如果设备内存较少,则会终止进程并将内存分配给高优先级应用程序。回来时,它会从oncreate()
方法恢复,此处不仅会重新加载webView
,还会重新加载整个应用。
如果您的activity
处于stop
状态并且用户导航它,那么它将从onRestart()
开始,它不会触及onCreate
但会经过{{1}你的应用程序不会重新启动,而是放在onStart()
和onstart
中的内容。
基本上你必须了解活动状态,这是一个链接。 https://developer.android.com/reference/android/app/Activity.html
<强>的iOS 强>: 同样的事情发生在iOS,但以不同的方式,很少发生但我从来没有这个问题,因为与Android设备相比,因为设备内存将是好的。
将您的webView加载到onResume
中,不要在ViewDidLoad()
或ViewDidAppear()
中加载,因为后两种方法会被频繁调用,而第一种方法会在应用加载时调用。
注意:您的Webview不会自动重新加载代码,因为上述任何一个原因而重新加载。
希望此文档有所帮助。
答案 1 :(得分:1)
我在我的某个应用中使用网页浏览,但我没有遇到此问题。我发布的代码可能会帮助你。如果没有告诉我,我脑子里还有另一个解决方案。
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
boolean isLoadingComplete;
Activity activity;
private ProgressDialog progDailog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
super.onPause();
// Store values between instances here
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit(); // Put the values from the UI
editor.putBoolean("isloaded", isLoadingComplete); // value to store
// Commit to storage
editor.commit();
}
@Override
protected void onResume() {
super.onResume();
isLoadingComplete = false;
activity = this;
progDailog = ProgressDialog.show(activity, "Loading", "Please wait...", true);
progDailog.setCancelable(false);
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progDailog.show();
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, final String url) {
progDailog.dismiss();
isLoadingComplete = true;
}
});
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
isLoadingComplete = preferences.getBoolean("isloaded", false);
if (!isLoadingComplete) {
webView.loadUrl("http://www.statimllc.com/");
}
else
{
progDailog.dismiss();
isLoadingComplete = true;
}
//webView.loadUrl("file:///android_asset/index.html");
}
}
}