更改应用时调用的活动onResume()

时间:2016-08-12 16:40:19

标签: android android-activity onresume

我想知道是否有办法区分何时从同一个应用程序或其他应用程序调用活动的onResume()方法。

例如,当我从Whatsapp或我的应用程序的其他活动返回应用程序时,我希望区分何时调用我的主要活动onResume()。

我知道有一种方法可以使用GET_TASKS权限,但该方法已弃用,不推荐使用。

谢谢

1 个答案:

答案 0 :(得分:0)

您似乎想知道应用程序何时从每个Activity的前景到前景。这可以使用扩展Application类并实现ActivityLifecycleCallbacks接口的类来实现。首先,这是这个类的代码:

public class MyApplication extends Application implements ActivityLifecycleCallbacks {

    public boolean appInBackground;
    private Handler mHandler;  

    ...  

    @Override   
    public void onActivityResumed(Activity activity) {
        Log.i("Activity Resumed", activity.getLocalClassName());

        mHandler.cancelCallbacksAndMessages(null);  
        appInBackground = false;
    }   

    @Override   
    public void onActivityPaused(Activity activity) {
        Log.i("Activity Paused", activity.getLocalClassName());

        mHandler.postDelayed(new Runnable() {
             @Override  
             public void run() {  
                  appInBackground = true;
             }  
        }, 5000);  
    }   

    ...  

} 

如果您在上面的代码中注意到我们基本上给应用程序一个5秒的宽限期来从一个活动切换到另一个活动。如果超过该值,则表示应用程序处于后台。上述类需要在<application>属性android:name:""下的清单文件的android:name:"MyApplication"标记中注册。

要在您的活动中使用此功能,请覆盖onPause()

private boolean resumedFromBg;

@Override
protected void onPause() {
    super.onPause();
    resumedFromBg = ((MyApplication) getApplication()).appInBackground;
}

如果您遇到任何问题,请告诉我们