1

アプリケーションのメインのアクティビティを表示する前に、ユーザーがログインする必要がある典型的な Android アプリがあります。ただし、キャッシュされたユーザー名/パスワードを既に取得している場合は、ログイン ページをスキップします。

LoginonCreateで、ユーザー/パスを取得して新しいアクティビティをプッシュしたかどうかを検出できましたが、これによりアプリの起動が遅くなるのではないかと心配しています (アクティビティをロードしてすぐに破棄する必要があるため)。 、そしておそらく戻るボタンも壊れます(つまり、戻ってログイン画面に戻ることができます)。

これを回避し、キャッシュされたパスワードがない場合にのみ完全なログイン アクティビティをロードする方法はありますか?

4

4 に答える 4

2

ログイン アクティビティまたはメイン アクティビティのいずれかを起動する別のヘルパー アクティビティを作成できます。そのでは、バック スタックからヘルパー アクティビティを削除するためにonCreate使用startActivityしてすぐに呼び出します。finish

Intent intent;
if ( /* already logged in */ ) {
    intent = new Intent(this, MainActivity.class);
} else {
    intent = new Intent(this, LoginActivity.class);
}
startActivity(intent);
finish();

その後、通常どおりLoginActivity再起動する必要がありMainActivityます。この方法では、ヘルパー アクティビティがバック スタックに表示されないため、ユーザーはヘルパー アクティビティに戻ることができなくなります。ただし、ユーザーは引き続きログインして に移動し、MainActivityそのアクティビティを一時停止し、(Android の設定を介して) アカウントを削除し、(最近のアプリから) アクティビティを再開できることに注意してください。これを防ぎたい場合は、MainActivity代わりにログイン リダイレクトを (おそらく にもonResume) 配置したほうがよいでしょう。

于 2013-09-10T23:05:50.173 に答える
1

スプラッシュ アクティビティを作成できます。

AndroidManifest.xmlスプラッシュ アクティビティ タグに、android:noHistory="true".

スプラッシュ アクティビティで、必要なものをすべて確認し (AsyncTaskアクティビティのフリーズを避けるために、時間がかかる場合は を使用してください)、結果に応じて、ログイン アクティビティまたはその他のアクティビティを開始します。

于 2013-09-10T22:39:56.037 に答える
1

同じ要件を持つ典型的な Android アプリもあり、次のように解決します。

最初に、初期起動アクティビティを に設定し、MainActivity内部onCreate()で、ユーザーが資格情報を保存しているかどうかを確認します (これはすべてAccountManager認証サービスを通じて行われます)。

チェックが失敗し、ユーザーが認証する必要がある場合は、LoginActivity. ログインに失敗した場合、またはユーザーがボタンを押した場合、はそれ自体をMainActivity呼び出してアプリ全体を閉じます。finish()それ以外の場合は、ログイン後にMainActivityが再開され、ユーザーに適切に表示されます。

この順序でそれを行う利点は、(私の場合はとにかく)ユーザーがログインする可能性が高くなるため、不要なアクティビティの開始/停止が回避されることです。

2 番目の利点は、MainActivity(または別のアクティビティ) が後で再開され、ユーザーのセッションが期限切れになった場合に、単純に を再起動LoginActivityして再認証できることです。

すべてが理にかなっていることを願っています:)

于 2013-09-10T22:59:43.350 に答える
1

もう 1 つの方法は、ログイン画面を から に変換するActivityことDialogです。それは簡単なはずです。そして、キャッシュされたユーザー名/パスワードがあるかどうかをメインアクティビティで確認します。2 番目のケースでは、ユーザーに表示LoginDialogします。

于 2013-09-10T22:49:56.020 に答える