android如何获取顶层栈顶的activity
2018-10-29 本文已影响44人
古都旧城
为什么要获取栈顶的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);
}
}