有时候,需要获取当前位于栈顶的activity的实例。这里介绍2种方法,以及各自适用的场景。
第一种方法:获取栈顶activity的实例
应用场景:项目中,activity都继承于一个BaseActivity,在这个base中,有个广播接收器,收到广播,就弹出一个dialog。现打开多个activity,这个时候,通过三方推送等方法,发出一个广播,base接收到。因为只需要在栈顶的activity弹出,而不是每个activity都弹出,所以,需要获取栈顶activity的实例(即上下文,传给dialog的构造方法),而不能简单的传个this,否则,会导致每个activity都有dialog弹出。
获取方法:在application中
1 | public class MyApplication extends Application { |
注意:initGlobeActivity()、getInstance()、getCurrentActivity() 这3个方法
使用方法:在base的展示dialog方法中
1 | Activity currentActivity = MyApplication.getInstance().getCurrentActivity(); |
第二种方法:获取栈顶activity的完整包名
应用场景:仅仅为了判断当前activity是不是在栈顶,以便决定要不要弹toast等等。
注意:获取到的仅仅是完整包名,判断当前activity在不在栈顶,需要用到String方法中的contains方法等。这个时候需要注意,以免出错。如:栈顶activity名为AB,里面包含A,就认为A是在栈顶,就出错了。最好这个activity的名字很特殊,和其他的没有重合部分
在工具类中创建方法:
1 | /** |
使用:
1 | String topActivity_1 = Util.getTopActivity(this); |