【问题标题】:Android intent getting "lost" (activity not started)Android 意图“丢失”(活动未开始)
【发布时间】:2023-04-03 15:35:02
【问题描述】:

我正在尝试在我的应用程序中添加一个WebView 活动,以便在打开帮助 HTML 文件时,它们可以保证被浏览器打开。 只要活动开始,它就可以工作。但是功能充其量是脆弱的,很多时候WebViewActivityonCreate() 函数永远不会被调用,就好像startActivity 发送的意图得到lost in cyberspace。有时它会起作用。我看不到任何关于 logcat 的东西,这表明它为什么会如此断断续续地工作。

另外,我有一部手机可以在 90% 的时间内正常工作,而另一部手机的工作时间为 10%。

有没有人遇到过这种情况?

编辑:

开始活动的代码:

public final void launchInternalHTMLFile(String filePath)
    {
        try {
            Intent intent = new Intent(Main.this, WebViewActivity.class);
            intent.putExtra("TheURL", filePath);
            Log.d("Tag", "launchInternalHTMLFile " + filePath);
            startActivity(intent, null);
            Log.d("Tag", "launchInternalHTMLFile startActivity called");
        } catch (Exception ex) {
            Log.e("Tag", "launchInternalHTMLFile exception: " + ex);
        }
    }

WebViewActivity 代码:

public class WebViewActivity extends Activity {
    private WebView mWebView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("Tag", "WebViewActivity.onCreate");
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        mWebView = new WebView(this);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });
        this.setContentView(mWebView);
        mWebView.postDelayed(new Runnable() {
            @Override
            public void run() {
                mWebView.loadUrl(getIntent().getStringExtra("TheURL"));
            }
        }, 100);
    }

    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

使用 logcat 我可以看到 ActivityManager 接收到意图,但是当问题发生时,我在日志中没有条目说“WebViewActivity.onCreate”...

哦。忘记了清单:

<activity android:name=".WebViewActivity" android:label="@string/app_name" android:screenOrientation="portrait">
</activity>

编辑:它大部分时间工作的手机是Android 4.4.2,而大部分时间不工作的手机是4.4.4。很奇怪。

编辑:问题已被追溯到 GLSurfaceView.onPause 永远不会返回,有效地挂起应用程序。虽然这只发生在 startActivity 上,否则挂起/恢复工作正常...... :(

【问题讨论】:

  • 是的,没有代码。问题的要点在正文中。但公平地说,我会用代码更新问题,但我保证这无助于确定这一点。

标签: android android-activity webview


【解决方案1】:

您是否在活动的主线程中调用launchInternalHTMLFile(String filePath)

【讨论】:

  • 它是从 C++ 基础框架的主线程调用的(通过 JNI),我不能 100% 确定它们是否相同。该应用程序基于 JUCE 框架 (juce.com)。
  • 我尝试使用 runOnUiThread(...) 来确保,但没有任何区别 :( ,不过感谢您的想法。
【解决方案2】:

我通过将嵌入式活动的启动延迟 50 毫秒(使用 android.os.Handler.postDelayed)“解决了”这个问题。

至少现在,GLSurfaceView.onPause 没有锁定,但仍然......应该有更好的方法来解决这个问题。

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多