2017-12-09 12 views
0

私は何かをする前に、ユーザがログインしているかどうかをチェックする必要がある簡単なアプリケーションを持っています。 は、これを行うために、私はこのようなApplicationクラスを継承した:アプリケーションのサブクラスから開始するアクティビティを決定する

public class GBApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     if (userIsLoggedIn()) { 
      Intent overviewActivity = new Intent(this, Overview.class); 
      overviewActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(overviewActivity); 
     } 
    }  
} 

userIsLoggedIn()SharedPreferencesファイルに保存されているブール値を返します。

すべて動作しますが、Overviewアクティビティから戻ると、デフォルトのアクティビティ(MainActivity)にリダイレクトされ、AndroidManifest.xmlファイルから削除されるとエラーが発生します。 また、これは非アクティビティクラスなのでfinish()と呼ぶことはできません。

Overviewクラスから戻ったらプログラムを終了できますか?私はMainActivityに値を渡す解決策を見つけました。そこからfinish()を呼び出してください。しかし、これは複雑に思えます。 他に何ができますか?あなたのケースでシャットダウンすることです

これはあなたが単に(onBackPressedをオーバーライドすることができAndroidManifest.xml

+0

overviewActivityのonBackPressed()をオーバーライドするだけではどうですか? – Taslim

+0

これは異常に悪いことです。プロセスが作成されるたびに、この特定のプロセスでアクティビティが必要ない場合でも、アクティビティを開始します。 'MainActivity'は両方のシナリオを扱うようにしてください(例えば、それぞれのケースの異なるUIのためのフラグメントを使用する)。あるいは、 'MainActivity'が必要に応じて' Overview'を開始することを決定してください。 – CommonsWare

+0

@CommonsWare私はあなたの助言に従い、何を始めるべきかを判断する唯一の役割を果たすダミー活動を作成します。 しかし、あなたの答えを広げて、何が悪いのかをもっと教えてください。私たちは仲介活動を始めていないので、簡単ではないでしょうか? – SnuKies

答えて

1

プランが問題を引き起こします。プロセスが作成されるたびに、この特定のプロセスでアクティビティが必要ない場合でも、アクティビティを開始します。そのようなホーム画面のランチャーアイコン—をタップし、ユーザへの応答のようにランチャー活動—を表示

は、プロセスアプリのために作成されるかもしれないこと1つのの方法です。

  • AlarmManager
  • JobScheduler
  • Notification
  • (Firebaseクラウドメッセージングから、例えば)プッシュメッセージ
  • あなたからエクスポートContentProviderに送信された要求:しかし、多くの人がありますアプリ
  • Serviceにアプリからエクスポートするリクエストを送信しました
  • マニフェスト登録BroadcastReceiver
  • これらのシナリオのいずれにおいて

の概要画面

  • などであなたのタスクに戻るユーザーが適切必ずしもこのアクティビティを表示しています。Androidがアプリケーションのプロセスをフォークするたびに、このアクティビティが表示されるため、あなたのコードはすべてのアクティビティを表示します。

    ユーザーがログインしているかどうかをすべてのアクティビティ(ログイン以外)で確認し、必要に応じてユーザーをログインアクティビティにルーティングします。ユーザーがログインを完了し、ログインアクティビティが終了すると、ランチャーアクティビティや他のアクティビティ(たとえば、あなたのアプリがあなたのプロセスは終了しましたが、Androidはあなたが最後に行った活動に戻そうとします)。

  • 0

    の私applicationタグである)あなたのoverviewActivityとパイロットのバックボタンが押されたときにアプリが行く方向(アプリは):

    @Override 
        public void onBackPressed(){ 
         startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
    } 
    

    上記のコードは、ちょうど)かなり退屈な..しかし、シンプルですぐに戻るボタンを一度クリックすると、あなたのアプリを(シャットダウンします。以下のコードスニペットを試すこともできます。ダイアログボックスが表示されます。

    @Override 
        public void onBackPressed(){ 
         new AlertDialog.Builder(this) 
            .setMessage("Are you sure you want to exit?") 
            .setCancelable(false) 
            .setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
             public void onClick(DialogInterface dialog, int id){ 
              startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
             } 
            }) 
            .setNegativeButton("No", null) 
            .show(); 
    } 
    
    関連する問題