2016-07-30 7 views
1

私のアンドロイドアプリケーションでは、10のアクティビティがあります。私はこれらの活動すべてを番号で識別します。アクティビティ1からアクティビティ10に変更できます。Androidアプリケーションのライフサイクルメソッドとは何ですか? (アクティビティライフサイクルメソッドではありません)

  1. アクティビティ1はスプラッシュスクリーンです。
  2. アクティビティ2 =ログイン画面
  3. アクティビティ3〜10は本の通常ページです。

私のアプリに初めてログインすると、スプラッシュ画面とログイン画面が表示されます。私のアプリはパスワードを尋ねます。それから私は本のページ1である活動3に私をリダイレクトします。今、私がページ5、すなわちアクティビティ7にいると仮定して、突然ホームボタンを押した後、アプリケーションはバックグラウンド状態になります。

私は、アプリケーションとアプリケーションをフォアグラウンドで再び開くと、アクティビティ7を開始しません。まず、アクティビティ2(ログイン画面)を開始してから、正しいパスワードを尋ねます。ユーザーが正しいパスワードを入力すると、アクティビティー7のみが開始されます。 基本的に私の質問は、アプリケーションがバックグラウンドに入るのか、フォアグラウンドに入るのかを特定する方法はありますか? (つまり、アンドロイドアプリケーションのライフサイクルの方法です。)まず、アプリのライフサイクルメソッドを通じてログインアクティビティを開始できます。これは、アプリケーションのライフサイクルメソッドを委譲することで、iOSで可能です。しかし、どのように私はアンドロイドでそれを行うことができますか?

+0

iOSで最後にアクティブなアクティビティをどのように覚えていますか? –

+0

私はその活動番号を共有プリファレンスに保存するつもりです – appleBoy21

+1

同じ概念をここに使用します。ユーザーがログインすると、インテントを使用してそれぞれのアクティビティに移動します。 –

答えて

1

これは、アクティビティライフサイクルのために発生します。ホームボタンを押してアプリケーションを閉じると、その時点でアクティブだったそれぞれのアクティビティのonStop()メソッドが呼び出されます。このメソッドはActivityを完全に破棄せず、停止させるだけです。

それぞれのアクティビティのonDestroy()メソッドを呼び出すと、Android OSのアクティビティが破棄されます。ただし、onDestroy()メソッドはActivityのLifeCycleのメソッドであるため、直接呼び出すことはできません。 Android OSによって自動的に呼び出されます。アクティビティが停止するとすぐにActivityのonDestroy()メソッドが呼び出されるように、それぞれのActivityのonStop()メソッド内でfinish()メソッドを呼び出します。

@Override 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

さて、あなたがもう一度あなたのアプリを起動しますと、それはすなわち、スプラッシュスクリーン最初からスタートします。

+0

ちょっとありがとう:) これは私が探しているケースだと思います。私のために素晴らしいと思われる。私はあなたが言っているものを持っています。私は今これを試してみるつもりです。何か問題が見つかった場合、私はあなたに戻ってきます。もう一度ありがとう – appleBoy21

+0

あなたの歓迎:) –

+0

あなたの問題が解決したら、私の答えを受け入れてください。 –

0

この目的のためにアプリケーションクラスを拡張することができます。あなたは、このようなそこのアクティビティのライフサイクルコールバックを実装する必要があります。

public class MyApplication extends Application implements ActivityLifecycleCallbacks { 

    private boolean userLoggedOff; 
    private Handler mHandler; 

    ... 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("Activity Resumed", activity.getLocalClassName()); 

     if (userLoggedoff) 
      startPasswordActivity() 
     else { 
      mHandler.cancelCallbacksAndMessages(null); 
      userLoggedOff = false; 
     } 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Log.i("Activity Paused", activity.getLocalClassName()); 

     mHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        userLoggedOff = true; 
      } 
     }, 5000); 
    } 

    ... 

} 

、ここで私たちがしようとしているが、すぐにすべての活動のonPause()としては、私たちがオフにユーザーをログにハンドラを使用して遅延イベントをトリガと呼ばれているということです。このイベントは、アクティビティのonResume()が5秒以内に呼び出された場合にのみキャンセルできます(これは通常のアクティビティの切り替え中に呼び出される場合もありますが、アプリがバックグラウンドからのものである場合もあります)。

これは、問題をエレガントに解決する可能性があります。

+0

ありがとうございましたshaishav。非常に有用なポストと思います。しかし、間違ってホームボタンを押して、すぐに5秒以内にアプリを起動したとします。同じアクティビティが開始されると思います...もう一度ログインアクティビティを再開したい場合があります – appleBoy21

+0

だから、あなたは与えたくありません任意のヘッドルームはユーザーに?ホームボタンと 'hasta la vista baby'を一回クリックしますか? :) – Shaishav

+0

ええ、右...私はそのような行動をしたいです – appleBoy21

1

ユーザーに余裕を持たせたくないため、アプリがバックグラウンドになると同時にログオフしたいので、一般的なアクティビティライフサイクルを使用して、アプリをバックグラウンドにするタイミングと画面切り替えが発生しました。アプリケーションクラスは次のようになります。

public class MyApplication extends Application implements ActivityLifecycleCallbacks { 

    public boolean userLoggedoff; 

    ... 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("Activity Resumed", activity.getLocalClassName()); 

     if (userLoggedoff) 
      startPasswordActivity() // Make sure you add 'CLEAR_TOP' flag to intent 
    } 

    ... 

} 

はあなたの次のテンプレートに従って活動「ログイン」してください:

public class Act1 extends Activity { 

    private boolean legitSwitch; 

    ... 

    // Legit app switch 
    private void startNewAct() { 
     legitSwitch = true; 
     ... 
     startActivity() 
    } 


    protected void onPause() { 
     if (!legitSwitch) 
       ((MyApplication) getApplication()).userLoggedOff = true; 
    } 

} 

あなたはログイン活動からtrueにuserLoggedOffブール値を設定していることを確認します。お役に立てれば。今度は、ホームボタンを押して戻った後、アプリケーションクラスのメソッドonActivityResumed()を実行しているので、上記のメソッドは以前のアクティビティを瞬時に表示しますが、ユーザーがホームボタン!

+0

ありがとう。あなたのポイントを得ました。私は私のプロジェクトでもこれを試してみるつもりです。それはあなたからの素晴らしい学習でした。ありがとう – appleBoy21

関連する問題