美文网首页
android获取栈顶activity的方法

android获取栈顶activity的方法

作者: xbase | 来源:发表于2017-08-23 15:38 被阅读624次

该方法支持需要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 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;
  }

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


}

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

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

相关文章

网友评论

      本文标题:android获取栈顶activity的方法

      本文链接:https://www.haomeiwen.com/subject/qhoddxtx.html