方法一:创建一个基类,所有的activity都继承自这一个基类,在基类中注册广播接收者,收到弹出popwindow的广播后就弹出广播,需要注意的一点是,当前activity不可见
时是不需要弹出popwindow的,因此需要声明一个变量表示当前activity是否可见。
public
abstract
class
BaseActivity
extends
FragmentActivity
implements
OnClickListener {
protected boolean needPopOrderOver;//当前界面是否可见
@Override
protected void onCreate(Bundle
savedInstanceState) {
// TODO Auto-generated method
stub
super.onCreate(savedInstanceState);
//注册广播
MyReceive myReceive
= new
MyReceive();
IntentFilter
filter = new
IntentFilter();
filter.addAction("android.intent.action.order_ok");
registerReceiver(myReceive, filter);
}
@Override
protected void onStop()
{
super.onStop();//不可见时
needPopOrderOver = false;
}
@Overrideprotected
void onStart() {
super.onStart();//可见时
needPopOrderOver = true;
}
public
class
MyReceive
extends
BroadcastReceiver {
@Override
public void onReceive(Context
context, Intent intent) {
String
action = 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()获取最后个子元素,这里是栈顶的Activity
if(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的地方,直接掉用即可。
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
MyActivityManager.getInstance().setCurrentActivity(activity);
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
MyActivityManager.getInstance().setCurrentActivity(null);
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
//调用方法:
MyActivityManager.getInstance().getCurrentActivity()// 就是当前正在运行的activity,然后弹出popwindow即可。