我正在编写应用程序,在某些地方需要访问当前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;
}
}
}