2012-07-18 40 views
0

假设我有4个活动:Login,Sync,Main,Details登录申请的概念

MainDetails只能在用户登录并通过同步阶段时才能访问。可以从抽屉上的图标访问Main。可以从Main和通知中访问Details

用户在30分钟不活动后(使用服务计时器)注销。

我不知道我应该采取哪种方式,以确保在用户登录这里是我的两个方案:

  • 图标启动Login如果用户登录,检查,然后启动Synch ,它也是这样做的,并启动Main
  • 图标启动Main哪些检查是用户登录的,如果没有,则启动LoginLogin自动关闭以显示Main位于背面堆叠。

然后还有Details如果用户登录,需要检查。

第二个场景似乎更正确的我,因为它允许推出比Main等活动,但它会迫使我在每个需要用户登录的活动中复制检查代码(我有两个以上的活动)。

为什么我应该采取的方式?为什么?

+0

为什么不让你的服务决定是否用户是否登录?您拥有的每项活动都将绑定到您的服务。 – DroidBender 2012-07-18 14:00:05

回答

2

您可以扩展BaseActivity它实现了你所有的检查代码,那么你使用任何新Activity都会有它内置的。

我中有活动获得50%无需登录一个应用程序使用此并使用startActivityForResult(...)显示提示以捕获登录尝试的成功或失败。

它的作品真的很好,并保持整洁的一切封装:)

编辑

下面的代码片段,你想修改:

/** 
* This is an abstract class that all Activities will be based on. 
*/ 
public abstract class BaseActivity extends ActionBarActivity 
{ 
    protected static final int SHOW_WALLET  = 100; 
    protected static final int SHOW_OFFER_DETAIL = 101; 
    protected static final int REGISTER   = 102; 
    protected static final int SHOW_ACCOUNT  = 103; 

    protected static final int LOGGED_IN_OK  = 103; 
    protected static final int REGISTERED_OK  = 104; 

    protected static final int DIALOG_DELAY  = 300; 
    // for passing data in extras 
    protected static final String TEXT_SEARCH  = "text_search"; 
    protected static final String SEARCH_TERM  = "search_term"; 

    protected boolean    mAlternateTitle = false; 
    private Dialog    loading; 
    private Runnable    showDialog; 

     protected final void openAccount() 
     { 
      Intent i; 
      if (LoginManager.getInstance().isLoggedIn()) 
      { 
       i = new Intent(this, MyAccountActivity.class); 
       startActivity(i); 
      } 
      else 
      { 
       i = new Intent(this, LoginActivity.class); 
       startActivityForResult(i, SHOW_ACCOUNT); 
      } 
     } 

} 
+0

这听起来像是最好的解决方案。 – 2012-07-18 13:58:22

+0

这看起来不错。但是我需要确保BaseActivity的子类不使用与“登录”相同的requestCode。 – Jonas 2012-07-18 14:03:13

+0

在BaseActivity中创建一些可以访问的受保护的final int CODE_ACTIVITY_XYZ常量。使BaseActivity也是抽象的,有助于保持简单。 – ScouseChris 2012-07-18 14:05:21