2种判断(获取)栈顶activity的方法_u014620028的专栏-_android获取栈顶activity
第一种方法:获取栈顶activity的实例
应用场景:项目中,activity都继承于一个BaseActivity,在这个base中,有个广播接收器,收到广播,就弹出一个dialog。现打开多个activity,这个时候,通过三方推送等方法,发出一个广播,base接收到。因为只需要在栈顶的activity弹出,而不是每个activity都弹出,所以,需要获取栈顶activity的实例(即上下文,传给dialog的构造方法),而不能简单的传个this,否则,会导致每个activity都有dialog弹出。
获取方法:
在application中:
public class MyApplication extends Application {
private static MyApplication mInstance;
private Activity app_activity = null;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
initGlobeActivity();
}
private void initGlobeActivity() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
app_activity = activity;
Log.e("onActivityCreated===", app_activity + "");
}
@Override
public void onActivityDestroyed(Activity activity) {
app_activity = activity;
Log.e("onActivityDestroyed===", app_activity + "");
}
/** Unused implementation **/
@Override
public void onActivityStarted(Activity activity) {
app_activity = activity;
Log.e("onActivityStarted===", app_activity + "");
}
@Override
public void onActivityResumed(Activity activity) {
app_activity = activity;
Log.e("onActivityResumed===", app_activity + "");
}
@Override
public void onActivityPaused(Activity activity) {
app_activity = activity;
Log.e("onActivityPaused===", app_activity + "");
}
@Override
public void onActivityStopped(Activity activity) {
app_activity = activity;
Log.e("onActivityStopped===", app_activity + "");
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
});
}
/**
* 获取实例
* @return
*/
public static MyApplication getInstance() {
return mInstance;
}
/**
* 公开方法,外部可通过 MyApplication.getInstance().getCurrentActivity() 获取到当前最上层的activity
*/
public Activity getCurrentActivity() {
return app_activity;
}
注意:initGlobeActivity()、getInstance()、getCurrentActivity() 这3个方法
使用方法:
在base的展示dialog方法中:
Activity currentActivity = MyApplication.getInstance().getCurrentActivity();
Dialog dialog = new Dialog(currentActivity, R.style.PushDialog);
————————————————