当前位置: 首页 > 知识库问答 >
问题:

Android电源按钮和webview或可能的活动生命周期

萧奇
2023-03-14

我有活动生命周期与网络视图和电源按钮的问题。

我加载javascript页面与游戏内webview和我保留webview在应用程序上下文,所以它生存活动破坏。我知道我不应该像这样保存视图,但我有非常具体的场景,这是唯一的解决方案。它在应用程序之间切换时工作正常(即使有“不保留活动”调试标志),但当我这样做时:

  1. 使用webview运行活动
  2. 一旦游戏加载到webview按电源按钮关闭屏幕
  3. 重新打开屏幕
  4. 解锁屏幕(通过向上滑动)
  5. 活动将加载,但webview没有加载,只是黑屏

我试着打印出所有的活动生命周期方法,在这两种情况下都是相同的。这两种情况之间有什么区别?

代码应用程序上下文:

public class MyApp extends Application {
    private WebView mWebView;

    //getter, setter ...
    //preserving webview in app context
}

代码活动:

public void onCreate() {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initWebView();
}

private void initWebView() {
    MyApp app = (MyApp) getApplication();
    mWebView = app.getWebView();
    if (!app.isWebViewInitialized()) {
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setDomStorageEnabled(true);
        mWebView.requestFocus();
        mWebView.addJavascriptInterface(new JavascriptInterface(this), "JSInterface");
        mWebView.loadUrl("http://js-game-url.com");
        mWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        mWebView.setWebViewClient(new WebViewClient());

        app.setWebViewInitialized(true);
    } else {
        try {
            ((ViewGroup) mWebView.getParent()).removeView(mWebView);
            //todo remake the try catch
        } catch(NullPointerException e) {
            System.out.println("Null");    //todo remove try catch
        }
    }


    webviewPlaceholder = (RelativeLayout) findViewById(R.id.rlayout2);
    webviewPlaceholder.addView(mWebView);
}

protected void onPause() {
    super.onPause();
    webviewPlaceholder.removeView(mWebView);
}

protected void onResume() {
    super.onResume();
    initWebView();
}

protected void onDestroy() {
    super.onDestroy();
    webviewPlaceholder.removeView(mWebView);
}

我肯定错过了一些简单的事情,但我找不到解决办法。

共有1个答案

岳涵煦
2023-03-14

这不是活动生命周期的问题,而是webview javascript生命周期的问题。当重新打开屏幕后重新创建活动时,webview没有获得焦点。这修正了它:

mWebView.requestFocus();
 类似资料:
  • 我为测试函数做了简单的应用程序,如onCreate()、onStart等。每个函数都让你有自己的日志。开始测试。 null 为什么在执行应用程序时调用onResume方法?(在a中) 为什么onPause和onStop方法一起调用?(在b中) 为什么在C中调用三个方法而不是onRestart或onrestume?(c) 为什么调用onDestroy方法?(d) 附言:对不起,英语:)

  • 本文向大家介绍Android活动生命周期介绍,包括了Android活动生命周期介绍的使用技巧和注意事项,需要的朋友参考一下 示例 假定具有MainActivity的应用程序可以通过单击按钮来调用Next Activity。 和 在首次创建应用程序 d / MainActivity:从主叫MainActivity的onCreate d / MainActivity:从主叫MainActivity调用

  • 问题内容: 我使用下面的代码,但没有找到解决方案。 MyReceiver.java: 和 MainActivity.java: 和 AndroidManifest.xml: 但点击时,我没有收到任何吐司消息。请帮助我了解如何获得点击次数,如果点击次数等于5,请转到另一个。请帮我实现这个吗? 问题答案: 试试这个, 和,

  • 我在开始新活动时遇到了一些问题。在我的应用程序中,我设置了侦听意图的广播接收器(屏幕关闭)。当屏幕关闭时,我的应用程序应该开始新活动(当然在某些情况下。我没有制作垃圾邮件应用程序)。但有时不是。 我在清单中声明了活动“singleTop”,所以我也重写了“onNewIntent”方法。(我认为这很重要)但事情是这样的。 当手机进入睡眠状态并且满足某些条件时,屏幕上会出现两个图标(“我的活动”)。我

  • 在我的调试中,我注意到在片段上首先调用onpause/onstart/onstop/ondestroy,然后在它的活动上调用onResume,而onResume则相反--活动的onResume在它的片段之前首先调用。 为什么活动和片段之间的onpause/onstart/onstop与onResume的顺序不同?

  • 我试图找出当锁屏启用和禁用时,活动生命周期中的差异。 场景A(无锁屏) 应用程序正在运行 按下电源按钮可关闭显示器 按下电源按钮打开显示屏 应用程序立即恢复 场景B(锁定屏幕启用,滑动解锁) 应用程序正在运行 按下电源按钮关闭显示 点击电源按钮打开显示 刷屏解锁 应用程序恢复(但我们在显示中得到一个错误,这是我们试图找到区别的地方) 我已经打印出了这两个场景的活动生命周期,它们在这两个场景中显示出