0

シナリオ - アプリケーションをバックグラウンドで実行していません。ACTION_USER_PRESENT 用に実装された受信機があります。このレシーバーでは、マニフェスト設定が次のアクティビティを開始します。

<activity android:name=".activity.MyActivityB"
    android:excludeFromRecents="true"
    android:noHistory="true"
    android:screenOrientation="portrait"/>

これは、ユーザーにポイントを付与するバナーがあり、ユーザーが同じバナーに対して何度も起動できるようにしたくないためです。

ユーザーが離れたらすぐにアクティビティを閉じたいので、一時停止でアクティビティを終了します。

しかし、Nexusデバイスを使用して、最近のボタンを押すと、最近のアクティビティにアクティビティが表示され、もう一度押すとアクティビティが再作成されます。

しかし、何が起こるべきかは、アクティビティがフォアグラウンドにあり、最近のボタンを押すと、これを呼び出したためにアクティビティが終了するはずです:

@Override
protected void onPause() {
System.out.println("MyActivityB onpause called ");
    super.onPause();
    bannerShown = false;
    if(!isFinishing())
        finish();
}

しかし、最近のボタンをもう一度押すと、アクティビティはおそらく終了せず、再作成されません。

これは、samsung デバイスではなく、最近のアプリ ボタン (四角いボタン) がある Android 6 および 7 を搭載した Nexus デバイスでのみ発生します。

4

1 に答える 1

0

savedInstanceState を使用できます。

https://developer.android.com/training/basics/activity-lifecycle/recreating.html

少し遅れてアクティビティを復元し、オブジェクトを再作成するために使用されますが、それらはシリアライズ可能である必要があります。ここで、アクティビティの状態をブール値で保存するために使用できます。

private static final String ACTIVITY_STATE = "activityState";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Check whether it's firstly opened or recreated
    if (savedInstanceState != null) {
        if(savedInstanceState.getBoolean(ACTIVITY_STATE)) {
            // recreated => force close
            finish();
        }
    } else {
        // first opend

    }
    ...
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Saves that it was open already
    savedInstanceState.putBoolean(ACTIVITY_STATE, true);
    super.onSaveInstanceState(savedInstanceState);
}
于 2016-11-24T11:51:09.417 に答える