2017-08-01 4 views
0

アプリを開いたり、バックグラウンドから来るたびに、ユーザーにPINを要求する機能を実装しようとしています。検索後、私はa solutionを見つけました。アプリがバックグラウンドから来たときにPINを問い合わせてください

私はベースがActivityで、残りは継承されています。それはParentActivityと呼ばれています。 ParentActivityForeground.Listenerを実装し、実行時にonBecameForegroundを上書きし、PINActivityを開きます。

public abstract class ParentActivity extends AppCompatActivity implements Foreground.Listener { 

    ... 

    @Override 
    public void onBecameForeground() { 
     openSecurityActivity(); 
    } 

    ... 

} 

以下のようなもの。そしてsuper

@Override 
public void onBecameForeground() { 
    super.onBecameForeground(); 
} 

を呼び出すために、すべての子クラスでこのメソッドをオーバーライドしPROBLEM

が今の問題はアプリケーションがフォアグラウンドに来る時はいつでも、このメソッドが実行されていますたとえ子Activityが作成されていなくても、このメソッドをオーバーライドしている子クラスが存在するため、時間の無駄です。私は

synchronized protected void openSecurityActivity() { 
    if(securityPinRequired) { 
     if(!isSecurityActivityOpened) { 
      isSecurityActivityOpened = true; 

      Intent intent = new Intent(this, FingerprintAndSecurityPINActivity.class); 
      intent.putExtra(Constants.ASK_SECURITY_PIN, true); 
      intent.putExtra("isForBackgroundVerification", true); 
      startActivity(intent); 
     } 
    } 

} 

、以下のようにopenSecurityActivity()の内側にチェックを入れてみましたが、それはまだ二回、それを開いています。私は問題を理解することはできません。ここで基本的なOOPの概念が欠けていますか?

何か助けていただければ幸いです。ありがとう。

+0

アプリケーションクラスに "Foreground"クラスを実装しました –

答えて

0

Aに非常に愚かな間違いを提出。

1

アンドロイドを追加します。launchMode = "singleInstanceを" のAndroidManifest.xmlに

+0

私はそれが私の問題を解決していることを知っていますが、なぜそれが何度も開いている理由を知る必要があります。 +1 –

関連する問題