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

为什么Android应用程序一次启动就启动了三次?

薛阳荣
2023-03-14

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

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()}")
    }
}

当我运行它时,我注意到有时它会启动三次。(有时,它会发射两次,有时发射一次)。

日志如下

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

起初,我以为是活动启动了3次,但是当我注销应用程序oncread时,它也启动了3次。我显式地放了一个静态变量某物,并且清楚地看到应用程序是3个不同的实例(因为变量没有在3次中递增)。

确认这不是因为配置更改或活动被终止(如中所述)https://stackoverflow.com/a/3588750/3286489),我也会在onPause、onStop、onSavedInstanceState和onDestroy都没有收到呼叫时注销。

有人知道为什么应用程序只启动一次就启动了三次吗?

注意:我在Android SDK 31和30以及Emulator API S和API 29上编译,它们都有相同的行为。也在实际设备Android8.0上试用过。表现出同样的行为。

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

共有1个答案

景唯
2023-03-14

显然,这是Android Studio的过滤问题。我让跟踪来过滤日志。它显示了同一类型的多个日志。

当我从日志中删除一个字符时,过滤器就会得到纠正。放回角色后,过滤器仍然正常。

见下面的GIF。

 类似资料:
  • 问题内容: 我有一个Java应用程序。 该应用程序具有一个设置,该设置决定该应用程序是否在启动时启动。 目前,我可以通过在“启动项目”文件夹中放置/删除快捷方式来实现此目的。 但是,我想知道是否有更好的方法来处理此行为。 编辑 是的,它是Windows。抱歉,之前没有清除该内容。 该应用程序具有一个用户可以在其中触发动作的UI,并且该应用程序在运行时会定期在后台运行一些任务。 @Peter,如何在

  • 我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与

  • 我最初的程序是为了将数据插入我的数据库。我有4个表,其中插入了数据,为了优化起见,我在一个单独的线程中这样做,因为实体是异步创建的。我正在使用consume方法将实体添加到队列中。 过了一段时间,我决定使用Spring Boot将web api添加到我的应用程序中。Spring Data JPA是需要的,因为一些POST请求将数据插入到我的数据库中。但是Spring Data JPA与我已经在使用

  • 我正在尝试在我的spring应用程序中集成一个Quartz工作。我从这里得到了这个例子。该示例显示使用以重复的时间间隔执行作业,并在特定时间使用执行作业。 谢谢..

  • 我们有一台10.11版的MacBookPro。3已安装。我们用这台机器进行测试。这台机器出了问题,以至于我们的一个传统碳应用程序无法从Finder打开/启动。该应用程序坐在基座上并反弹,但从未启动。 然而,当从我们构建的可可注册实用程序使用[NSWorkspace启动应用程序]以编程方式启动完全相同的应用程序时,该应用程序将始终启动。 尝试使用活动监视器对这个失败的启动应用程序进行采样往往不会显示

  • 我在intellij上启动spring boot应用程序时遇到问题,它失败了,并显示以下消息:与目标VM断开连接,地址:'127.0.0.1:49784',传输:'socket' 过程结束,退出代码为255。以前有人遇到过这种情况吗?