从任何地方访问当前活动

时间:2017-06-12 13:18:19

标签: android android-activity

我正在编写应用程序,在某些地方需要访问当前Activity。所以我编写了代码,通过调用Application.getApplication().getCurrentActivity()来提供访问权限。我想知道这种解决方案有哪些缺点,这是编写Android应用程序的好习惯吗?有人可以分享他的经历吗?

public class Application extends android.app.Application {

    private static volatile Application INSTANCE;

    private ApplicationLifecycleListener mApplicationLifecycleListener;

    public static Application application() {
        return INSTANCE;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        INSTANCE = this;
        initApplicationLifecycleListener();
    }

    private void initApplicationLifecycleListener() {
        mApplicationLifecycleListener = new ApplicationLifecycleListener();
       registerActivityLifecycleCallbacks(mApplicationLifecycleListener);
    }

    public Activity getCurrentActivity() {
       return mApplicationLifecycleListener.getCurrentActivityReference().get();
    }

    private class ApplicationLifecycleListener implements android.app.Application.ActivityLifecycleCallbacks {

        private WeakReference<Activity> mCurrentActivityReference;

        @Override
        public void onActivityResumed(Activity activity) {
            mCurrentActivityReference = new WeakReference<>(activity);
        }

        @Override
        public void onActivityPaused(Activity activity) {
            mCurrentActivityReference = null;
        }

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

        @Override
        public void onActivityStarted(Activity activity) {}

        @Override
        public void onActivityStopped(Activity activity) {}

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

        @Override
        public void onActivityDestroyed(Activity activity) {}

        public WeakReference<Activity> getCurrentActivityReference() {
            return mCurrentActivityReference;
        }
    }
}

0 个答案:

没有答案