Android App如何判断应用是否在前台还是处于后台

1.实现ActivityLifecycleCallbacks接口,这里考虑了应用遇到异常重启的情况,

resetVariables()方法可以重置状态。

package com.sohu.newsclient;

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;

/**
 * 用于判断App是否在后台
 * Created by kriszhang on 16/1/4.
 */
public class NewsLifecycleHandler implements Application.ActivityLifecycleCallbacks {

    // I use four separate variables here. You can, of course, just use two and
    // increment/decrement them instead of using four and incrementing them all.
    private static int resumed;
    private static int paused;
    private static int started;
    private static int stopped;

    public NewsLifecycleHandler(){
        resetVariables();
    }

    public void resetVariables(){
        resumed=0;
        paused=0;
        started=0;
        stopped=0;
    }


    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
    }

    @Override
    public void onActivityResumed(Activity activity) {
        ++resumed;
    }

    @Override
    public void onActivityPaused(Activity activity) {
        ++paused;
        android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }

    @Override
    public void onActivityStarted(Activity activity) {
        ++started;
    }

    @Override
    public void onActivityStopped(Activity activity) {
        ++stopped;
        android.util.Log.w("test", "application is visible: " + (started > stopped));
    }

    // If you want a static function you can use to check if your application is
    // foreground/background, you can use the following:


    public  static boolean isApplicationVisible() {
        return started > stopped;
    }

    public  static boolean isApplicationInForeground() {
        return resumed > paused;
    }

    public static boolean isApplicationInBackground(){
        return started==stopped;
    }

}
2.然后再自定义Application中
registerActivityLifecycleCallbacks(new NewsLifecycleHandler());
</pre><pre code_snippet_id="1555966" snippet_file_name="blog_20160113_5_6266074" name="code" class="java">3.在你想要判断的地方,比如home键或锁屏的时候,延迟一两分钟再去调用<pre name="code" class="java">isApplicationInBackground()
判断应用是否处于后台/前台,延迟判断是为了防止用户在很快的时间里切回前台继续使用,我们就曾经给某一厂商坐过一个OEM版,要求后台不允许驻留进程和服务。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值