0

私には4つのアクティビティがあるとしましょう: Login、、、。SyncMainDetails

MainまたDetails、ユーザーがログインして同期フェーズに合格した場合にのみアクセスできます。Main引き出しのアイコンからアクセスできます。通知から、または通知からDetailsアクセスできます。Main

ユーザーは、30分間操作がないと(サービスのタイマーを使用して)ログオフされます。

ユーザーがログインしていることを確認するためにどちらの方法をとるべきかわかりません。次の2つのシナリオがあります。

  • アイコンが起動Loginし、ユーザーがログインしているかどうかを確認してから、を起動します。Synchこれは同じことを行い、を起動しMainます。
  • アイコンが起動Mainし、ユーザーがログインしているかどうかを確認します。ログインしていない場合は、起動しLoginます。それがバックスタックにあったことLoginを示すためにそれ自体を閉じます。Main

そしてDetails、ユーザーがログインしているかどうかを確認する必要があることもあります。

2番目のシナリオは、以外のアクティビティを起動できるため、私にはより正しいように見えますMainが、ユーザーがログインする必要があるすべてのアクティビティでチェックコードを複製する必要があります(2つ以上のアクティビティがあります)。

なぜ私は道をとるべきですか?なんで?

4

1 に答える 1

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 );
            }
        }

}
于 2012-07-18T13:57:56.403 に答える