【问题标题】:Best way to check whether the app is in foreground检查应用程序是否在前台的最佳方法
【发布时间】:2016-02-24 11:16:42
【问题描述】:

我正在寻找如何知道我的应用是在前台还是后台。我已经看到了两种可能的解决方案,但我不确定哪个更好(如果有更好的解决方案)。

解决方案 1: 在我的应用程序类上创建两个计数器:

private int mResumedActivities = 0;
private int mPausedActivities = 0;

并在每个 onResume/onPause 上增加每个计数器,这样我就可以检查应用程序是否在后台:

public boolean isInBackground() {
    return mPausedActivities >= mResumedActivities;
}

解决方案 2: 在我的应用程序类中创建两个布尔值: 私有布尔 isAppResumed = false; 私有布尔 isAppInForeground = false;

并且在每个 onResume/onPause 上更新 isAppResumed 并且在每个 onResume 上设置 isAppInForeground 并且在每个 onPaused 上触发一个延迟处理程序,因此,如果在几毫秒后应用程序仍然暂停,则将 isAppInForeground 更新为 true。

我认为第一个解决方案更简单,但我不喜欢有两个可能永远递增的计数器。而且,onPause 会先被调用,然后是 onResume,所以会有几毫秒的时间,app 可能会认为这是在前台,而实际上不是。 你怎么看?

提前谢谢你!

【问题讨论】:

  • 那么你到底在哪里需要这个值呢?通常一个普通的开发者是怎么做的,在他想知道应用程序是否在前台的任何活动/片段中,他都会引入一个名为 isAcitivtyForeground 或 isFragmentForeground 的新片段/活动变量,并在 onPause 中将其设置为 false,在 onResume 中将其设置为 true
  • 我想从另一个服务或单例中检查它,完全独立于片段/活动。

标签: android performance android-lifecycle


【解决方案1】:

让你所有的活动都扩展BaseActivity,你可以使用BaseActivity.isForeground()检查应用是在前台还是后台。

public abstract class BaseActivity extends AppCompatActivity {

    public static final String TAG = BaseActivity.class.getSimpleName();
    private static boolean FOREGROUND = false;
    private static boolean FROM_BACKGROUND = true;

    public static boolean isForeground() {
        return !FROM_BACKGROUND;
    }

    @Override
    protected void onResume() {
        super.onResume();
        FOREGROUND = true;
        if (FROM_BACKGROUND) {
            Log.v(TAG, "from background");
            FROM_BACKGROUND = false;
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        FOREGROUND = false;
    }

    @Override
    protected void onStop() {
        super.onStop();
        FROM_BACKGROUND = !FOREGROUND;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2010-12-12
    • 1970-01-01
    • 2010-09-29
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多