首页 > 解决方案 > Android - 应用程序在 Chrome 启动时启动 - 这怎么可能?

问题描述

我正在开发一个具有奇怪行为的 Android 应用程序——它会在 Chrome 启动时自行启动。Chrome 打开的页面并不重要。我试图弄清楚如何阻止这种情况,但不知道这是怎么发生的。

Manifest 中没有什么不寻常的地方,也没有 Broadcast 监听器。此外,我在 Chrome 设置或任何扩展程序中没有看到任何异常。它发生在许多手机上,但不会发生在其他具有相同应用程序版本的手机上。

我们甚至尝试更改 applicationId - 它仍然会发生。

在 logcat 中,每当发生这种行为时,我只能看到这一行:

I ActivityManager: Start proc 9360:com.company.appthatshouldntstart/u0a269 for activity: rah

这是清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.app">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <application
        android:name=".ApplicationSpecifics"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:excludeFromRecents="true">

        <activity
            android:name=".Activities.MainActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".ServiceSocket"
            android:exported="false" />
    </application>
</manifest>

我想知道还有哪些其他方法可以使应用程序表现得像这样。

任何帮助都感激不尽!

标签: android

解决方案


发现了问题。

该应用程序有一个错误的 onDestroy() 逻辑,称为 System.exit(0),我读到这是一种不好的做法。显然,这导致应用程序在某些手机上退出时崩溃,Android 尝试重新启动应用程序。所以你最终关闭了应用程序,但它重新启动。几次重新启动后,应用程序放弃了,您认为您已正确关闭它。

但不是。当打开另一个应用程序(例如 Chrome,但最终我们看到它也发生在其他应用程序中)时,重新启动尝试仍在继续,这给人的印象是 Chrome 以某种方式导致应用程序启动。

因此,当 onDestroy() 逻辑被重写以遵循 Android 最佳实践(主要没有 System.exit(0) 以及其他一些东西)时,应用程序现在可以正确退出并且不再意外启动。


推荐阅读