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应用程序的好方法吗?”--不,不。你是在毫无解释地说出你的观点。