android如何获取顶层栈顶的activity

为什么要获取栈顶的activity

  • 在你真正进入到企业之后,更有可能的是接手一份别人写的代码,因为你刚进公司就正好有一个新项目启动的概率并不高。阅读别人的代码时有一个很头疼的问题,就是你需要在某个界面上修改一些非常简单的东西,但是你半天找不到这个界面对应的活动是哪一个。
  • 想做一个全局弹窗(弹窗是依托于当前activity的上下文的)

等等类似上面的需求,都需要我们获取栈顶的activity。

怎么获取

方式1

一般我们都写有基类,可以在基类里面打印或者获取context,依赖于基类,某些不继承基类的就不能获取了。

public class BaseActivity extends Activity {
       
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("BaseActivity", getClass().getSimpleName());
    }
   
}

效果


image.png

方式2

通过在application里面使用registerActivityLifecycleCallbacks方法注册监听,可适用性更强,不必依赖于基类。

public class App extends Application {
    ActivityLifecycleCallbacks callbacks;
    @Override
    public void onCreate() {
        super.onCreate();
       if (BuildConfig.PRODUCT_MODE) {//屏蔽不必要的注册
             return;
        }
        //注册对app内所有activity 的生命周期监听
        registerActivityLifecycleCallbacks(callbacks = new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                Log.e("Test","onActivityCreated:"+activity.getLocalClassName());
            }

            @Override
            public void onActivityStarted(Activity activity) {
                Log.e("Test","onActivityStarted:"+activity.getLocalClassName());
            }

            @Override
            public void onActivityResumed(Activity activity) {
                Log.e("Test","onActivityResumed:"+activity.getLocalClassName());
            }

            @Override
            public void onActivityPaused(Activity activity) {
                Log.e("Test","onActivityPaused:"+activity.getLocalClassName());
            }

            @Override
            public void onActivityStopped(Activity activity) {
                Log.e("Test","onActivityStopped:"+activity.getLocalClassName());
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                Log.e("Test","onActivitySaveInstanceState:"+activity.getLocalClassName());
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                Log.e("Test","onActivityDestroyed:"+activity.getLocalClassName());
            }
        });
// 注销app内所有activity的生命周期监听
// unregisterActivityLifecycleCallbacks(callbacks);
    }

}

你可能感兴趣的:(android如何获取顶层栈顶的activity)