【问题标题】:Android, track when app goes to backgroundAndroid,跟踪应用程序何时进入后台
【发布时间】:2014-01-15 06:34:42
【问题描述】:

后台:我在 Application 类中转储了一些数据,并在一段时间后或应用程序进入后台时(例如,当用户按下 Home 按钮或任务时)将其保存到文件中-切换器按钮)。我不想使用 Activity 类的 onPause() ,因为应用程序中有很多活动,我必须检查所有活动的 onPause() 。当我在我的应用程序中从一个活动跳到另一个活动时,也会调用 onPause(这会产生不必要的保存操作)。

问题:当应用程序进入后台时是否会触发一个通用事件,无论它处于哪个活动?

谢谢

【问题讨论】:

    标签: android android-applicationinfo


    【解决方案1】:

    连续检查下面的代码意味着你可以使用 Timer 类。

    ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<RunningTaskInfo> runningTasks = null;
    try {
        runningTasks = activityManager.getRunningTasks(1);
    } catch (Exception e) {
    
    }
    RunningTaskInfo runningTaskInfo = runningTasks.get(0);
    ComponentName topActivity = runningTaskInfo.topActivity;
    if(topActivity.getPackageName().equals(your packagename)){
       S.o.p("fine");}
    else{
       S.o.p.("application sent to background");}
    

    【讨论】:

    • 谢谢,这确实是跟踪您的应用程序状态的好方法,但是主动而不是被动地接收事件。看起来没有其他答案指出的那样。
    【解决方案2】:

    onStop() 在活动被隐藏时调用,即用户按下主页按钮。 onPause() 仅在 Activity 被隐藏时使用,即由于某些重叠而部分可见。当然,onPause() 会在 onStop() 被调用之前被调用。您可以在 Android Developers 上查看所有生命周期。我会鼓励你使用生命周期而不是反对它。当状态改变时保存你的数据。

    对于预定的数据存储,我建议您使用计时器。当您将所有数据提交到应用程序上下文时,您可以使用更少的恢复点,我建议将日期存储在 onDestroy() 调用中。如果没有,我建议实施 TimerTask 来安排数据的定期序列化。

    回答你的问题,不!完全考虑您的应用程序并具有一个生命周期根本不是Android。每个活动都有一个生命周期,所有活动都通过堆栈及其各自的生命周期联系在一起。

    【讨论】:

    • tks 为您提供有关计划数据存储的提示。回到onStop() 的事情,您的解决方案也与Activity 类相关联,而不是与Application 相关联。这不是我想要的,因为我说过有这么多活动,如果我使用它,我必须将该代码注入每个 onStop() 函数。
    • 您可以扩展 Application 并将该类用作您的上下文。 developer.android.com/reference/android/app/Application.html 但是,请记住,类不能对与活动相同的生命周期做出反应。也许你可以玩`registerActivityLifecycleCallbacks()`,但我没有这方面的经验。计划的计时器似乎是您最好的选择,因为您想要定时执行。
    • 谢谢你的小费。是的,我按时保存,但我试图防止在保存点之间发生坏事,因为用户可以切换到其他应用程序,而我的应用程序由于内存不足而被杀死。反正我可以试试你说的方法。
    • 为此,您应该按照开发人员的建议,使用活动的生命周期更改在暂停或停止时保存数据,并在恢复时恢复数据。尝试使用 API 并使用它,而不是围绕它进行编码。见developer.android.com/training/basics/activity-lifecycle/…
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2016-07-17
    • 2023-03-10
    • 2023-03-11
    相关资源
    最近更新 更多