【问题标题】:Why did Android Application start 3 times on single launch?为什么 Android 应用程序在一次启动时启动 3 次?
【发布时间】:2021-11-04 13:06:37
【问题描述】:

我从模板创建了一个应用程序,并填充了一些日志,如下所示

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        MainApplication.something++
        Log.d("Tracking", "onCreate ${MainApplication.something} ${Thread.currentThread()}")
        setContentView(R.layout.activity_main)
    }

    override fun onStart() {
        super.onStart()
        Log.d("Tracking", "onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.d("Tracking", "onResume")
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Log.d("Tracking", "onConfigurationChanged")
    }

    override fun onPause() {
        super.onPause()
        Log.d("Tracking", "onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d("Tracking", "onStop")
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Log.d("Tracking", "onSaveInstanceState")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("Tracking", "onDestroy")
    }
}

class MainApplication: Application() {
    companion object {
        var something = 0
    }

    override fun onCreate() {
        super.onCreate()
        Log.d("Tracking", "Application onCreate $something ${Thread.currentThread()}")
    }
}

当我运行它时,我注意到有时它会启动 3 次。 (有时会启动 2 次,有时会启动 1 次)。

日志如下

2021-11-04 23:55:31.409 7810-7810/com.example.empty D/Tracking: Application onCreate 0 Thread[main,5,main]
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.409 7810-7810/com.example.empty D/Tracking: Application onCreate 0 Thread[main,5,main]
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.508 7810-7810/com.example.empty D/Tracking: onStart
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume
2021-11-04 23:55:31.508 7810-7810/com.example.empty D/Tracking: onStart
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume

最初,我以为是 Activity 启动了 3 次,但是当我注销 Application onCreate 时,它​​也启动了 3 次。我明确放置了一个静态变量something,并清楚地看到应用程序是 3 个不同的实例(因为该变量在 3 次中没有递增)。

为了确认不是因为配置更改或活动被杀死(根据https://stackoverflow.com/a/3588750/3286489 中的解释),我还会在 onPause、onStop、onSavedInstanceState 和 onDestroy 都没有被调用时注销。

有谁知道为什么应用程序只启动一次就启动了3次?

注意:我在 Android SDK 31 和 30 以及 Emulator API S 和 API 29 上编译,它们都具有相同的行为。还在实际设备 Android 8.0 上进行了尝试。显示相同的行为。

更新我注意到它只发生在第二次编译之后。也许它只是一个重复清除的日志(虽然我已经清除了)。

【问题讨论】:

  • 您是否仅在 sdk 31 和 30 上获得此行为?另外,您是否尝试在设备上运行该应用程序?行为是否相同?
  • 在 Android 8.0 设备上也试过。这也会发生。
  • 可能与stackoverflow.com/questions/5771616/…相同的问题

标签: android


【解决方案1】:

显然,这是一个 Android Studio 过滤问题。 我在那里有Tracking 来过滤日志。并且显示多个同类型的日志。

当我从日志中删除一个字符时,过滤器会得到更正。放回角色后,滤镜还是可以的。

请看下面的 GIF。

【讨论】:

  • 所以这是 AS 本身的错误。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
相关资源
最近更新 更多