Android Как отменить перезагрузку webView после того как пользователь свернул приложение
Как отменить перезагрузку webView после того как пользователь свернул приложение и вернулся в Android? MainActivity.java
package app.beer.crazycahs;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private static String URL = "http://crazycash.tv";
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
hideUserBars();
sharedPreferences = getPreferences(MODE_PRIVATE);
webView = findViewById(R.id.web_view);
// add clients for webView
webView.setWebViewClient(new MyWebViewClient());
webView.setWebChromeClient(new WebChromeClient());
webView.setNetworkAvailable(true);
// enable javascript and otros functions
webView.getSettings().setJavaScriptEnabled(true);
webView.setFocusable(true);
webView.setFocusableInTouchMode(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
}
@Override
protected void onResume() {
super.onResume();
ConstraintLayout noInternetLabel = findViewById(R.id.not_internet);
if (hasConnection()) {
noInternetLabel.setVisibility(View.GONE);
// load web site
webView.setVisibility(View.VISIBLE);
String urlFromShared = sharedPreferences.getString("page_url", URL);
if (urlFromShared != null) {
if (urlFromShared.equals(URL)) {
webView.loadUrl(URL);
} else {
webView.loadUrl(urlFromShared);
}
}
} else {
webView.setVisibility(View.GONE);
noInternetLabel.setVisibility(View.VISIBLE);
}
}
private void hideUserBars() {
// скрываем user бары
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
public boolean hasConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiInfo != null && wifiInfo.isConnected()) {
return true;
}
wifiInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifiInfo != null && wifiInfo.isConnected()) {
return true;
}
wifiInfo = cm.getActiveNetworkInfo();
return wifiInfo != null && wifiInfo.isConnected();
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("page_url", webView.getUrl());
editor.apply();
}
private static class MyWebViewClient extends WebViewClient {
@SuppressLint("deprecated")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
}
}
Ответы (1 шт):
Автор решения: Sergei Buvaka
→ Ссылка
НУ у вас в onResume() есть код который вызывает перезагрузку вашей WebView
if (urlFromShared != null) {
if (urlFromShared.equals(URL)) {
webView.loadUrl(URL);
} else {
webView.loadUrl(urlFromShared);
}
}
onResume() - вызывается всякий раз когда активити открывается на первом плане, а значит после каждого сворачивания. Перенесите эту логику в onCreate() и обновление будет происходить только при создании Активити
Вам стоит лучше ознакомиться с Жизненным циклом Активити