【问题标题】:Webview activity calls onDestroy() when loses focusWebview 活动在失去焦点时调用 onDestroy()
【发布时间】: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 活动活跃?

【问题讨论】:

    标签: java android android-activity webview


    【解决方案1】:

    最后我发现了问题。 我忘记在清单中输入 webview 活动

    android:noHistory = "true"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多