Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从任何位置访问当前活动_Android_Android Activity - Fatal编程技术网

Android 从任何位置访问当前活动

Android 从任何位置访问当前活动,android,android-activity,Android,Android Activity,我正在编写的应用程序在某些地方需要访问当前的活动。因此,我编写了代码,通过调用Application.getApplication().getCurrentActivity()提供访问权限。我想知道这种解决方案可能有哪些缺点,它是编写Android应用程序的好方法吗?有人能分享他的一次经历吗 public class Application extends android.app.Application { private static volatile Application INS

我正在编写的应用程序在某些地方需要访问当前的
活动
。因此,我编写了代码,通过调用
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;
        }
    }
}
公共类应用程序扩展了android.app.Application{
私有静态易失性应用实例;
私有应用程序LifecycleListener映射应用程序LifecycleListener;
公共静态应用程序{
返回实例;
}
@凌驾
public void onCreate(){
super.onCreate();
实例=此;
initApplicationLifeCycleStener();
}
私有void initapplicationLifeCycleStener(){
MapApplicationLifecycleListener=新应用程序LifecycleListener();
registerActivityLifecycleCallbacks(MapApplicationLifecycleListener);
}
公共活动getCurrentActivity(){
返回mApplicationLifecycleListener.getCurrentActivityReference().get();
}
私有类应用程序LifecycleListener实现android.app.Application.ActivityLifecycleCallbacks{
私人财富参考mCurrentActivityReference;
@凌驾
活动上的公共无效已使用(活动){
mCurrentActivityReference=新的WeakReference(活动);
}
@凌驾
活动引发的公共无效(活动){
mCurrentActivityReference=null;
}
@凌驾
ActivityCreated上的公共无效(Activity-Activity,Bundle savedInstanceState){}
@凌驾
在ActivityStarted(活动{}上的公共无效
@凌驾
在ActivityStopped(活动{}上的公共无效
@凌驾
activitysaveinstanceState上的公共无效(Activity-Activity,Bundle-outState){}
@凌驾
活动上的公共无效已删除(活动){}
公共组织引用getCurrentActivityReference(){
返回mCurrentActivityReference;
}
}
}

如果您需要在某些地方访问
活动
为什么不将
活动
传递到这些“地方”。可能是因为我不知道现在恢复了哪个活动?最好的做法是使用
startActivity()/startActivityForResult()
和(像
标记活动/新任务
等标记)。或者更好的办法是将你的
活动
转换成
片段
,并在所有“某些地方”使用它。“这是编写Android应用程序的好方法吗?”--不,不。你是在毫无解释地说出你的观点。