方法一:创建一个基类,所有的activity都继承自这一个基类,在基类中注册广播接收者,收到弹出popwindow的广播后就弹出广播,需要注意的一点是,当前activity不可见
时是不需要弹出popwindow的,因此需要声明一个变量表示当前activity是否可见。
public
abstract
class
BaseActivity
extends
FragmentActivity
implements
OnClickListener {
protected boolean needPopOrderOver;//当前界面是否可见
@Override
protected void onCreate(BundlesavedInstanceState) {
// TODO Auto-generated methodstub
super.onCreate(savedInstanceState);
//注册广播
MyReceive myReceive= new
MyReceive();
IntentFilterfilter = new
IntentFilter();
filter.addAction("android.intent.action.order_ok");
registerReceiver(myReceive, filter);
}
@Override
protected void onStop(){
super.onStop();//不可见时
needPopOrderOver = false;
}
@Overrideprotectedvoid onStart() {
super.onStart();//可见时
needPopOrderOver = true;
}
public
class
MyReceive
extends
BroadcastReceiver {
@Override
public void onReceive(Contextcontext, Intent intent) {
Stringaction = intent.getAction();
if(Constants.ORDER_OK_ACTION.equals(action)){
//收到广播 弹出popwindow} }}
}
方法二:
声明一个activity管理类用来管理当前正在显示的activity,其中最主要的两个方法我用红色标出来
public class MyActivityManager {private static MyActivityManager sInstance = new MyActivityManager();private WeakReference<Activity> sCurrentActivityWeakRef;private MyActivityManager() {}public static MyActivityManager getInstance() {return sInstance;}public Activity getCurrentActivity() {Activity currentActivity = null;if (sCurrentActivityWeakRef != null) {currentActivity = sCurrentActivityWeakRef.get();}return currentActivity;}private static Stack mActivityStack;public void setCurrentActivity(Activity activity) {sCurrentActivityWeakRef = new WeakReference<Activity>(activity);}/*** 推出栈顶Activity*/public void popActivity(Activity activity) {if (activity != null) {activity.finish();mActivityStack.remove(activity);activity = null;}}/*** 获得当前栈顶Activity*/public Activity currentActivity() {//lastElement()获取最后个子元素,这里是栈顶的Activityif(mActivityStack == null || mActivityStack.size() ==0){return null;}Activity activity = (Activity) mActivityStack.lastElement();return activity;}/*** 将当前Activity推入栈中*/public void pushActivity(Activity activity) {if (mActivityStack == null) {mActivityStack = new Stack();}mActivityStack.add(activity);}/*** 弹出指定的clsss所在栈顶部的中所有Activity* @clsss : 指定的类*/public void popTopActivitys(Class clsss) {while (true) {Activity activity = currentActivity();if (activity == null) {break;}if (activity.getClass().equals(clsss)) {break;}popActivity(activity);}}/*** 弹出栈中所有Activity*/public void popAllActivitys() {while (true) {Activity activity = currentActivity();if (activity == null) {break;}popActivity(activity);}}}
然后在application中:
registerActivityLifecycleCallbacks是application中管理所有activity生命周期的一个方法,可以在该方法中处理我们的需求,当activity不可见和可见时设置刚才创建的
activitymanager中的activity对象,在需要弹出popwondow的地方,直接掉用即可。
@Overridepublic void onCreate() {super.onCreate();registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle bundle) {}@Overridepublic void onActivityStarted(Activity activity) {MyActivityManager.getInstance().setCurrentActivity(activity);}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {MyActivityManager.getInstance().setCurrentActivity(null);}@Overridepublic void onActivityStopped(Activity activity) {}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});}
//调用方法:
MyActivityManager.getInstance().getCurrentActivity()// 就是当前正在运行的activity,然后弹出popwindow即可。