当应用程序退出后台并回到iOS和Android时,WebView正在重新加载?

时间:2016-07-15 10:23:41

标签: android ios objective-c webview android-webview

我是一个小应用程序,只持有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);

2 个答案:

答案 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");
        }

    }
}