【问题标题】:Android calling onCreate() after finish() when in landscapeAndroid 在横屏时在完成()之后调用 onCreate()
【发布时间】:2013-02-22 17:00:18
【问题描述】:

我有一个 Activity 在其 onCreate 方法中启动 Vibrator 系统服务,然后当用户按下按钮时它会取消振动器,然后调用 finish() 来关闭该 Activity。

此活动是通过 AlarmManager 启动的,因此当它关闭时,它会将用户返回到他们当前打开的任何应用程序(不一定是我的)。

我遇到的问题是,如果我的活动处于横向模式,并且当活动关闭时用户被带到不支持横向的屏幕(例如主屏幕),我的应用程序切换到纵向和在实际关闭我的屏幕之前调用 onCreate() 。所以导致这个问题的步骤如下...

  • 活动以纵向模式启动
  • onCreate 方法被调用,启动振动器
  • 用户将手机旋转到横向模式
  • 再次调用onCreate,但由于onSaveInstanceState不为null,我可以跳过再次启动振动器
  • 用户按下按钮关闭屏幕
  • 我调用 vibrator.cancel()
  • 我调用finish()
  • 由于屏幕将用户带回到不支持横向模式的屏幕,我的活动调用 onCreate()
  • savedInstanceState 等于 null,所以振动器重新启动
  • 我的应用已关闭,但振动器仍在运行

目前我能想到的唯一解决方法是让我的活动只支持纵向模式,但如果可以的话,我想避免这种情况。有谁知道在我调用finish() 后可以防止调用onCreate() 的方法吗?

【问题讨论】:

    标签: android landscape oncreate portrait


    【解决方案1】:

    为什么不调用方法

    onPause()onStop() 并在此方法内部调用 vibrator.cancel()

    onStop() 总是在您的应用不再可见时被调用。

    查看this流程图

    【讨论】:

    • 这行得通,但它显然不是最佳的。当我这样做时,我单击按钮停止振动器,它停止,然后当我调用完成时它再次启动大约 3 秒,然后再次停止(显然这是 android 调用 onCreate 和 onStop 之后的时间我至少在我的手机上调用了finish()。
    • 比 onStop() 更快的 onPause 怎么样。
    • @eluid 如果我移动我的代码以启动振动器到 onResume,然后将取消放在 onPause 中,它似乎工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多