Nano Hash - криптовалюты, майнинг, программирование

WebView перезагружается, когда приложение уходит в фоновый режим и возвращается в iOS и Android?

У меня есть небольшое приложение, в котором есть веб-просмотр, не более того. Я загружаю веб-просмотр с URL-адресом. но когда мое приложение уходит в фоновый режим и возвращается, веб-просмотр перезагружается, для меня этого не должно происходить. Как остановить перезагрузку веб-просмотра, когда приложение переходит в фоновый режим на iOS и Android.

Примечание. И Safari (iOS), и Chrome (Android) обрабатывают это событие с одним и тем же URL-адресом, даже если они работают в фоновом режиме. Они не перезагружают веб-просмотр или данные.

Это мой код, мне нужно добавить что-нибудь еще:

iOS:

NSURL* url = [NSURL URLWithString:ip];
[webView loadRequest:[NSURLRequest requestWithURL:url]];

Android:

 String url = "http://"+ip+":8081";
 webView.loadUrl(url);

Ответы:


1

Существует несколько причин перезагрузки приложения.

Android

Если вы поместите свой код в метод onCreate() всякий раз, когда Activity переходит в состояние stop, и если памяти устройства меньше, то процесс будет уничтожен, а память будет выделена приложению с высоким приоритетом. при возвращении он возобновляется с метода oncreate(), здесь перезагружается не только ваш webView, но и все приложение.

И если ваш activity находится в состоянии stop и пользователь перемещается по нему, то он начинается с onRestart(), где он не будет касаться onCreate, но проходит через onStart(), где ваше приложение не будет перезапускаться, а то, что вы поместили в onstart и onResume.

В основном вы должны понимать состояния активности для этого. Вот ссылка. https://developer.android.com/reference/android/app/Activity.html

iOS: то же самое происходит с iOS, но по-другому и очень редко, но у меня никогда не было этой проблемы, потому что память устройства будет хорошей по сравнению с устройствами Android.

загрузите свой webView в ViewDidLoad() и не загружайте его в ViewDidAppear() или ViewWillAppear(), потому что последние два метода будут вызываться часто, а первый вызывается при загрузке приложения.

Примечание. Ваш веб-просмотр не будет автоматически перезагружаться вашим кодом, он перезагружается по любой из вышеуказанных причин.

Надеюсь, эта документация поможет.

18.07.2016
  • Я загружаю URL-адрес в viewDidLoad, но приложение все еще перезагружается в iOS. Есть ли другая возможная причина, которая может быть причиной этого? stackoverflow.com/questions/58274674/ 07.10.2019

  • 2

    Я использую веб-представление в одном из своих приложений, и я не сталкиваюсь с этой проблемой. Я отправляю код, может быть, он может вам помочь. если не скажите, у меня есть другое решение.

    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");
            }
    
        }
    }
    
    15.07.2016
  • Ваш код также перезагружает представление, я сделал только с вашим кодом полностью. 15.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..