假设我有4项活动:Login
,Sync
,Main
,Details
。
Main
和Details
。可以从抽屉上的图标访问Main
。可以从Details
和通知中访问Main
。
用户在不活动30分钟后退出(使用服务上的计时器)。
我不确定应采取哪种方式来确保用户已登录。以下是我的两种情况:
Login
,用于检查用户是否已登录,然后启动Synch
,同时启动Main
。Main
,检查用户是否已登录,如果没有,则启动Login
。 Login
自行关闭,以显示位于后台的Main
。然后还有Details
需要检查用户是否已登录。
第二种情况对我来说似乎更正确,因为它允许启动除Main
之外的其他活动,但它会强制我复制每个需要用户登录的Activity中的检查代码。(I有两个以上的活动。)
为什么我应该采取什么方式?为什么呢?
答案 0 :(得分: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 );
}
}
}