Webview 活动在失去焦点时调用 onDestroy()

Posted

技术标签:

【中文标题】Webview 活动在失去焦点时调用 onDestroy()【英文标题】:Webview activity calls onDestroy() when loses focus 【发布时间】:2021-11-10 10:03:35 【问题描述】:

我有一个带有 web 视图的简单活动:

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") && 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"

这涉及在失去焦点的情况下销毁活动(不涉及 web 视图)。

【讨论】:

以上是关于Webview 活动在失去焦点时调用 onDestroy()的主要内容,如果未能解决你的问题,请参考以下文章

当 iOS 11 Webview 失去焦点时,HTML <select> 停止触发 onchange 或 onblur

Activity生命周期

Android WebView 文本框确认密码第二个获取焦点后设置不能自动放大

win7系统 当前窗口总是失去焦点

DOM EVENT

js常用事件