【问题标题】:How to distinguish between switching an activity Vs switch to Home Screen in Android如何区分在Android中切换活动与切换到主屏幕
【发布时间】:2011-07-22 10:57:29
【问题描述】:

我正在开发 Android:: 媒体播放器应用程序。为简单起见,该应用程序有 3 个活动:A、B 和 C 是活动。

当我从 Activity A 切换到 B 时:Activity A 的 onPause() 和 onStop() 被调用。但是当我从 Activity A 进入主屏幕时,会调用相同的函数:onPause() 和 onStop()。

目前我面临一个问题:如果用户进入主屏幕:: 户外能见度、亮度等设置必须重置为系统,另一方面,如果我在活动之间切换,我必须根据具体应用维护这些值。

我如何区分,我正在同一个应用程序的活动之间切换(或)进入主屏幕。

【问题讨论】:

    标签: android homescreen


    【解决方案1】:

    我认为解决方案是检测用户何时按下 HOME 按钮。你可以通过重写方法来做到这一点

        onUserLeaveHint()
    

    Activity 类。

    【讨论】:

    • 这不是 Activtiy 特定的回调吗?在某些情况下,应用程序会进入后台模式,而无需用户按 Home 键。例如:媒体播放器正在运行并且来电场景。我想在这种情况下不会调用 onUserLeaveHint。
    • 这在 2019 年不起作用。可悲的是,每次离开活动时(例如启动新活动时)都会调用 onUserLeaveHint() - 不仅在用户按下主页按钮时。
    【解决方案2】:

    也许您可以在使用您的应用时使用SharedPreferences 来存储应用的特定设置。然后总是在 onStop() 中恢复

    【讨论】:

    • 目前我正在使用 SharedPreferences 来维护设置值并根据我的应用程序何时在前台进行存储/恢复。但是应用程序有可能在任何活动中进入后台[A/B/C] - 在这种情况下,必须在所有活动的 onStop() 中复制代码。有没有更好的方法来了解整个应用程序进入了后台模式?
    • 嗯...应用程序类 (developer.android.com/reference/android/app/Application.html)。没有这样的功能,但您可以在您的应用程序中进行此设置并获取一个通用功能,并在您的活动的 onStart/onStop 中调用它。你不需要到处复制代码。
    • 感谢您的评论。是的,我们可以将代码保存在一个函数中,并且可以从所有活动中调用相同的代码,但唯一的问题是 - 它是基于每个活动的。
    • 正如我所提到的,在应用程序级别,Android 不提供退出函数,我们可以使用它来恢复这些值(尽管您可以在应用程序的 onCreate() 中设置它们)。
    【解决方案3】:

    您应该在每次活动出现在屏幕上时进行这些更改,并在它们从屏幕上消失时恢复设置。活动应该像单独的模块,因此减少它们的依赖性是一件好事。

    最好通过创建模板活动来完成。在onResume()onPause() 方法中进行所有必要的更改,并从中派生所有其他活动。这样,您的设置管理代码将在每个活动中自动调用。

    至于一般的应用程序状态,您无法真正检测到您的应用程序是否出现在屏幕上,因为 Android 中的应用程序只是一堆独立的组件(活动、服务、内容提供者和广播接收器)。没有一个应用程序本身具有特定的可见性状态。只有活动才有它,彼此独立。

    【讨论】:

    • 是的,我同意减少他们的依赖会很好。但截至目前,有 3 项活动,并计划再增加 2 项。我们必须为所有新活动处理这些事情。是否有任何方法可以将我在主屏幕(或)切换到新的应用程序/主屏幕中识别为应用程序?
    • 我不知道。但这应该不是问题,您可以编写一个模板活动来管理与onResume()onPause() 中的设置相关的所有内容,并从中派生其他活动。这样,您将在所有活动中自动获得必要的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2021-10-06
    相关资源
    最近更新 更多