Android如何防止屏幕关闭/打开时重新加载webview?

Android如何防止屏幕关闭/打开时重新加载webview?,android,android-activity,android-webview,android-lifecycle,application-state,Android,Android Activity,Android Webview,Android Lifecycle,Application State,我看到了很多与我的问题相关的文档和文章,但我没有得到任何合适的解决方案。当我按下电源按钮打开/关闭时,WebView将被重新加载。我不想重新加载WebView 我想做的是 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow()

我看到了很多与我的问题相关的文档和文章,但我没有得到任何合适的解决方案。当我按下电源按钮打开/关闭时,
WebView
将被重新加载。我不想重新加载
WebView

我想做的是

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    loadpages();
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (!ConnectivityStatus.isConnected(context)) {
            // no connection
            WebView wv = (WebView) findViewById(R.id.webView1);
            wv.loadData(iError, "text/html", "UTF-8");
            // Toast.makeText(getApplicationContext(),"Internet connection failure",Toast.LENGTH_SHORT).show();
        }
    }
};

@Override
protected void onResume() {
    super.onResume();
    this.registerReceiver(receiver, new 
IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
 @Override
protected void onPause() {
    super.onPause();
    this.unregisterReceiver(receiver);
 }
@Override
public void onBackPressed() {
    AlertDialog.Builder alertDialog = new 
   AlertDialog.Builder(MainActivity.this);
    alertDialog.setTitle("Local");
    alertDialog.setMessage("Exit Application");
    alertDialog.setCancelable(true);
    alertDialog.setPositiveButton("YES", new 
    DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
       // User pressed YES button. Write Logic Here
            MainActivity.this.finish();  
        }
    });
    alertDialog.setNegativeButton("NO", new 
   DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // User pressed No button. Write Logic Here
            //   Toast.makeText(getApplicationContext(), "You clicked on 
           NO", Toast.LENGTH_SHORT).show();
        }
    });
    alertDialog.show();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
@SuppressLint("NewApi")
public boolean loadpages() {
    WebView wv = (WebView) findViewById(R.id.webView1);
    WebSettings webSettings = wv.getSettings();
    webSettings.setJavaScriptEnabled(true);
    wv.getSettings().setLoadWithOverviewMode(true);
    wv.getSettings().setUseWideViewPort(true);
    CookieManager.getInstance().setAcceptCookie(true);
     TelephonyManager mngr = (TelephonyManager) 
    getSystemService(Context.TELEPHONY_SERVICE);
    String imeino = mngr.getDeviceId().toString();
   CookieManager.getInstance().setCookie
   ("http://MyLocalHost/projects/aaaaa", "IMEINO=" + imeino);
    String url = "http://MyLocalHost/projects/aaaaa/index.php"
    wv.setWebViewClient(new WebViewClient() {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (!loadingFinished) {
    redirect = true;
    }
    loadingFinished = false;
    view.loadUrl(url);
    return true;
    }
  @SuppressWarnings("unused")
  public void onPageStarted(WebView view, String url) {
    loadingFinished = false;
    // SHOW LOADING IF IT ISNT ALREADY VISIBLE
    }
  public void onPageFinished(WebView view, String url) {
    if (!redirect) {
    loadingFinished = true;
    }
    if (loadingFinished && !redirect) {
    // HIDE LOADING IT HAS FINISHED
    } else {
    redirect = false;
     }
    }
    });
    loadingFinished = false;
    wv.loadUrl(url);
   return loadingFinished;
}} 
我正在尽我最大的努力。我还在AndroidManifest.xml文件中添加了
android:launchMode=“singleTask”
。你们能为我的问题提供解决方案吗。

试试:

if (savedInstanceState == null)
{
web.loadUrl(webURL);
}

尝试在您的生命周期方法中添加:

@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
web.saveState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);
}
试一试

而不是

@Override
protected void onResume() {
    super.onResume();
    this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
} 

@Override
protected void onPause() {
    super.onPause();
    this.unregisterReceiver(receiver);
}

检查您的webview在上屏幕后重新加载的位置。我的意思是将log in oncreate、onpause、onresume、loadpages方法@A2N屏幕上锁定应用程序调用onpause或onStop。屏幕在Resume上解锁应用程序调用。设置webviewclient并将js启用为true1。在开始加载webview的同时启动计时器。2.在计时器内检查IsLoading是否已完成,如果需要,在resume和pause中显示错误屏幕。只需检查网络连接,然后告诉我您手机的内存已满或您有一些空间。如果是,则告诉我剩余空间如果您将代码放入onCreate()中方法,当活动进入停止状态时,如果设备内存不足,则会终止进程并将内存分配给高优先级应用程序。当返回时,它将从oncreate()方法恢复,此时不仅会重新加载您的webView,还会重新加载整个应用程序。请检查您的广播接收器onReceive()。如果您正在接收onResume(),则每当片段/活动恢复时,您的Web视图都将加载。@james yup我已选中。但无法获得任何解决方案
@Override
protected void onResume() {
    super.onResume();
    this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
} 

@Override
protected void onPause() {
    super.onPause();
    this.unregisterReceiver(receiver);
}