Действие Webview вызывает onDestroy (), когда теряет фокус

#java #android #android-activity #webview

Вопрос:

У меня есть простое действие с веб-представлением:

 public class AGenericWebView extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a_generic_web_view);
        WebView webView = findViewById(R.id.mainWebView);
        ImageButton backButton = findViewById(R.id.backButton);

        backButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);
        Bundle intentBundle = getIntent().getExtras();

        webView.getSettings().setSaveFormData(false);

        TextView title = findViewById(R.id.title);
        title.setText(intentBundle.containsKey("title")
                ? intentBundle.getString("title")
                : getResources().getString(R.string.navigazione));

        webView.setWebViewClient(new WebViewClient());
        WebSettings settings = webView.getSettings();
        settings.setSaveFormData(true);
        settings.setDomStorageEnabled(true);
        if (intentBundle.containsKey("cookie") amp;amp; intentBundle.containsKey("url")) {
            final String cookie = intentBundle.getString("cookie");
            final String url = intentBundle.getString("url");
            CookieManager.getInstance().setCookie(url, cookie);
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
            webView.loadUrl(url);
            webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int progress) {
                    setProgress(progress * 100);
                }
            });
            webView.setWebViewClient(new WebViewClient());

        } else if (intentBundle.containsKey("html")) {
            String htmlData = intentBundle.getString("html");
            webView.loadData(htmlData, "text/html", "UTF-8");
        } else if (intentBundle.containsKey("url")) {
            String url = intentBundle.getString("url");

            if (intentBundle.containsKey("postdata")) {
                String postData = intentBundle.getString("postdata");
                byte[] postDataBytes = EncodingUtils.getBytes(postData, "BASE64");
                webView.postUrl(url, postDataBytes);
            } else
                webView.postUrl(url, null);
        }
    }
}
 

Когда пользователь переключается между приложениями, т. Е. для копирования OTP от аутентификатора (и затем действие теряет фокус), действие вызывает onDestroy(), поэтому ему приходится повторить процедуру входа в систему.

Как я могу сделать, чтобы поддерживать активность webview?

Ответ №1:

В конце концов я нашел проблему. Я забыл указать в манифесте для действия webview

 android:noHistory = "true"
 

что предполагает уничтожение активности в случае потери фокуса (веб-представление не было задействовано).