0

假设我有 4 个活动:Login, Sync, Main, Details.

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

用户在闲置 30 分钟后注销(使用服务上的计时器)。

我不确定应该采取哪种方式来确保用户已登录。这是我的两种情况:

  • 图标启动Login检查用户是否登录,然后启动Synch,执行相同操作并启动Main
  • 图标Main启动检查用户是否登录,如果没有,则启动LoginLogin关闭自身以显示Main它在后堆栈上。

然后还Details需要检查用户是否已登录。

第二种情况对我来说似乎更正确,因为它允许启动其他活动Main,但它会迫使我在需要用户登录的每个活动中复制检查代码。(我有超过 2 个活动)。

我为什么要走?为什么?

4

1 回答 1

2

您可以扩展BaseActivity实现所有检查代码的 a,然后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 );
            }
        }

}
于 2012-07-18T13:57:56.403 回答