有时候,需要获取当前位于栈顶的activity的实例。这里介绍2种方法,以及各自适用的场景。最后有demo测试数据以供参考
第一种方法:获取栈顶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 ou