android获取栈顶activity的方法

该方法支持需要api14或以上。
1.重写Application,并使用registerActivityLifecycleCallbacks方法接收activity的回调。

public class MyApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
      @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

      }

      @Override public void onActivityStarted(Activity activity) {

      }

      @Override public void onActivityResumed(Activity activity) {
        MyActivityManager.getInstance().setCurrentActivity(activity);
      }

      @Override public void onActivityPaused(Activity activity) {

      }

      @Override public void onActivityStopped(Activity activity) {

      }

      @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

      }

      @Override public void onActivityDestroyed(Activity activity) {

      }
    });
  }
}

2.MyActivityManager使用weakReference,以防内存泄漏。

public class MyActivityManager {

  private WeakReference sCurrentActivityWeakRef;


  private static volatile MyActivityManager singleton;

    private MyActivityManager () {
    }

    public static MyActivityManager getInstance() {
        if (singleton == null) {
            synchronized (MyActivityManager.class) {
                if (singleton == null) {
                    singleton = new MyActivityManager();
                }
            }
        }
        return singleton;
    }

  public Activity getCurrentActivity() {
    Activity currentActivity = null;
    if (sCurrentActivityWeakRef != null) {
      currentActivity = sCurrentActivityWeakRef.get();
    }
    return currentActivity;
  }

  public void setCurrentActivity(Activity activity) {
    sCurrentActivityWeakRef = new WeakReference(activity);
  }


}

3.在需要获取的地方使用:

 Activity activity = MyActivityManager.getInstance().getCurrentActivity();


 

你可能感兴趣的:(android,java)