2016-03-01 68 views
0

我想从非View类的静态方法访问当前活动,我想知道这个apporach是否合适:在非View类中以静态方法获取当前活动

class MyApplication extends Application { 
    private static MyActivity mCurrentActivity; 
    private static void setCurrentActivity(MyActivity currentActivity) { 
     mCurrentActivity = currentActivity; 
    } 
    private static MyActivity getCurrentActivity() { 
     return mCurrentActivity; 
    } 
} 

然后我会创建一个名为MyActiviy自定义活动,并用它来进行所有的应用程序的活动,这是怎么MyActivity是会是:

class MyActivity extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyApplication.setCurrentActivity(this); 
    } 
} 

然后,每当我想获得一个当前活动的实例,我只需拨打即可方法。我知道这个代码会工作,但我只想知道这是否是一个好东西使用这种方法?

我知道我只能将活动作为参数传递给静态方法,但我想要一种访问当前活动的全局方法。

回答

1

我知道这段代码会工作,但我只是想知道,如果这是一个好东西,使用这种方法?

您正在泄漏记忆。只要您从Application获得参考,那么该活动的实例及其保存的所有内容都不能进行垃圾收集。

除此之外,Application并没有真正帮助你。如果你要泄漏内存,至少在实施方面更有效率,并使用一个简单的static字段。

+0

我不明白这是如何泄漏内存?当我在同一项活动中时,该字段保持不变。每当我移动到另一个活动时,该字段将被设置为新的活动。之前的活动仍然在记忆中,因为当我回去时它仍然在那里。它是否正确? – m2008m1033m

+0

@ m2008m1033m:“当我在同一场活动中,场地保持不变,每当我移动到另一个活动时,该场地将设置为新活动” - 除了前进之外,还有更多的导航路径。至少,您需要确保在所有这些路径中,您的全局引用指向正确的活动。这包括处理未处理的异常,配置更改等等。 – CommonsWare

+0

那么还有另外一种方法可以实现这一点,或者我必须将活动传递给任何需要它的方法吗? – m2008m1033m

相关问题