【问题标题】:Two consecutive Toast messages won't show when they are called exactly after each other on Android Oreo在 Android Oreo 上,两个连续的 Toast 消息在被调用时不会显示
【发布时间】:2019-03-24 07:19:21
【问题描述】:

以下代码在运行Android version lower than 27 的设备上正确显示两条连续消息,但在Android version 27 上,它只显示第一个Toast 的消息。

Android 27 发生了哪些变化,使其行为有所不同?

两个连续的 Toast 消息的间隔是否应该长于特定时间?

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    Toast.makeText(this, "The onCreate method is called", Toast.LENGTH_SHORT).show()
}

override fun onResume() {
    super.onResume()

    Toast.makeText(this, "The onResume method is called", Toast.LENGTH_SHORT).show()
}

【问题讨论】:

  • 嗨@Mehrdad,我在使用Android 9 时遇到了同样的问题。您找到解决方案了吗?谢谢
  • 不,很遗憾。但考虑到我不再从事 Android 开发。从那时起,也许已经解决了这个问题。

标签: android kotlin android-8.0-oreo android-toast


【解决方案1】:

你需要编写一个跟踪状态的小程序
我使用 API 26 和 API 27 运行,只有当您从另一个 Activity 导航返回时才会调用这行代码

Toast.makeText(this, "The onResume method is called", Toast.LENGTH_SHORT).show()

享受

好的,下面是你如何编写一个跟踪状态的小程序
这是为您提供输出的活动,将您的 logcat 设置为调试注意 TAG

open class BaseActivity : AppCompatActivity() {

val TAG = "LifeCycle"

override fun onCreate(savedInstanceState: Bundle?) {
    Log.d(TAG, "${javaClass.simpleName} OnCreate")
    println("========================== OnCreate")
    super.onCreate(savedInstanceState)
}

override fun onStart() {
    Log.d(TAG, "${javaClass.simpleName} OnStart")
    println("========================== OnStart")
    super.onStart()
}

override fun onResume() {
    Log.d(TAG, "${javaClass.simpleName} OnResume")
    println("========================== OnResume")
    super.onResume()
}

override fun onRestart() {
    Log.d(TAG, "${javaClass.simpleName} OnRestart")
    println("========================== OnRestart")
    super.onRestart()
}

override fun onPause() {
    Log.d(TAG, "${javaClass.simpleName} OnPause")
    println("========================== OnPause")
    super.onPause()
}

override fun onStop() {
    Log.d(TAG, "${javaClass.simpleName} OnStop")
    println("========================== OnStop")
    super.onStop()
}

override fun onDestroy() {
    Log.d(TAG, "${javaClass.simpleName} OnDestroy")
    println("========================== OnDestroy")
    super.onDestroy()
}

}

然后,当您从一个活动类导航到另一个活动类时,您将获得输出
前提是您在课程中使用此标题

class WelcomeActivity : BaseActivity() {

【讨论】:

  • 我认为你的问题弄错了。问题是调用两个Toast 消息(即使在一个状态下——例如在onCreate 中调用两个Toasts)不会显示第二个Toast,只会显示第一个Toast 消息。我已经使用Log 跟踪应用程序生命周期状态,一切正常。
  • @MehrdadSComputer 让我试着理解这一点。如果您使用 API 27 两者都显示,但如果您更改为 API 26 则只显示一个?
  • 如果我在具有 Android API 27 的模拟器上运行代码,它只会显示第一条 Toast 消息,但如果我在具有 Android API 25 的模拟器上运行相同的代码,它会同时显示 Toast消息一个接一个(按顺序)。
猜你喜欢
  • 2012-07-21
  • 2014-07-04
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多