将Activity的实例作为参数传递并从另一个类中完成()它是不好的做法吗?

时间:2014-07-16 08:06:39

标签: java android

我有一些活动多次使用完全相同的方法logout()redirect()

使用单独的类并将这些方法标记为static,如下所示:

public class AuthUtil {

public static void redirect(SessionManager manager, Activity activity) {
    manager.redirect();
    activity.finish();
}

public static void logout(SessionManager manager, Activity activity) {
    manager.logoutUser();
    activity.finish();
}

}

通过以下方式从活动中调用它们:

AuthUtil.logout(mSession,this);

或者我应该将使用该方法的活动扩展到一个公共Activity类,并将方法放在那里(除了没有参数,因为在这种情况下方法不需要它们)?但是,如果其中一项活动延伸FragmentActivity,另一项活动延伸ActionBarActivity,我就无法做到这一点,实际情况就是这样......

基本上,我想知道从一个单独的类体而不是它自己调用活动的方法是不是一种不好的做法?如果是这样,我该怎么办?

2 个答案:

答案 0 :(得分:1)

不,这不被认为是不好的做法 - 但选择那条路线是因为它最容易,这可能是你后来后悔的决定。

您应该问自己以下问题:

  1. 负责完成活动?
  2. 谁知道何时才能完成活动?
  3. 谁知道如何来完成活动?(通常是Activity,但可以肯定)。
  4. 在你的情况下,它可能是:

    • 活动本身
    • 会话管理员
    • 算法
    • 其他完全

    一旦你回答了这些问题,你就应该知道如何实施。

    请记住,您还可以创建第三个对象,也许是负责的ActivityManager。当finish完成会话时,它可以包含需要SessionManager的活动列表。然后你可以:

    sessionManager.redirect(activityManager);
    

    其他情况可能导致

    // Make sure when the session completes this activity is finished.
    sessionManager.registerAttachedActivity(Activity activity);
    

    // Activity must finish when redirect completes.
    activity.finish(sessionManager.redirect());
    

    它实际上并不像良好做法不良做法那么简单,它更多的是关于正确

答案 1 :(得分:1)

  

使用单独的类并将这些方法标记为是否可以   静态如下

没有。通过仅查看给定活动的源代码来确定完成活动的位置将非常困难。而且很难看出这些方法运行的是什么线程。最后,因为它们是静态的,所以如果活动在重定向或注销时需要执行其他或不同的操作,则必须添加新方法。

  

或者我应该扩展活动......

根据我的经验,将活动与继承层次结构联系起来并不是一个好主意,并且您指出了一些不这样做的好理由。如果您需要代码重用,请尝试使用组合。

我总是从同一个活动中调用Activity.finish,实际上我希望将整个生命周期图片包含在活动的代码中。但这正是我的胆量告诉我的,对你的问题没有明确的正确答案。