0

Вот сценарий:Андроид: nohistory флаг игнорируется

  1. Пользователь использует активность # 1, чтобы назначить сигнал (с помощью андроида AlarmManager службы), и возвращается к исходному экрану. Активность # 1 остается в стеке.

  2. AlarmReciever «s onReceived() называется, как было запланировано:

    @Override 
    public void onReceive(Context context, Intent intent){ 
    
        Intent intent = new Intent(context ,Activity2.class); 
    
    intent.setFlags(
         Intent.FLAG_ACTIVITY_NEW_TASK | 
         Intent.FLAG_ACTIVITY_NO_HISTORY 
           ); 
    
    context.startActivity(intent); 
    } 
    
  3. активность # 2 (Activity2) начинает успешно.

    public class Activity2 extends Activity { 
        @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
    
        setContentView(R.layout.activity_layout_2); 
    
        getWindow().addFlags(
          WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | 
            WindowManager.LayoutParams.FLAG_FULLSCREEN 
        ); 
    
    } 
    
    @Override 
    protected void onResume() { 
        super.onResume(); 
    
        findViewById(R.id.dismiss_button).setOnClickListener(
          new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            finish(); 
    
           } 
          } 
        ); 
    
    } 
    

    }

  4. Пользователь нажимает на кнопку (R.id.dismiss_button), чтобы finish() активность 2 #.

  5. система переходит обратно в рабочий стол, как и ожидалось, еще активность # 2 остается на стеке (появляется, когда пользователь нажимает на Recent Button)

Пожалуйста, обратите внимание, что в дополнение к установке Intent.FLAG_ACTIVITY_NO_HISTORY флаг намерения, флаг был также указан в AndroidManifest.xml (и я попытался также каждый из них сепарабельнозначных):

<activity 
     android:name=".Activity2" 
     android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden" 
     android:launchMode= "singleInstance" 
     android:noHistory="true" 
     > 
    </activity> 

Кроме того, флаг Intent.FLAG_ACTIVITY_NEW_TASK требуется как активность # 2 было начало от AlarmReceiver, а не другой деятельностью.

ответ

0

Флаг NO_HISTORY просто предотвращает появление этого Activity в стеке задач после того, как Activity больше не отображается. В вашем случае, если вы нажмете HOME, когда отобразится Activity2, вы увидите, что Android вызывает finish() и onDestroy() на эту активность сразу (это не обычное поведение, когда задача помещается в фоновый режим).

Чтобы сделать то, что вы хотите, вам нужно добавить

android:excludeFromRecents="true" 

к манифесту записи для Activity. Это говорит Android, что вы не ставите свою задачу в список недавних задач.

Смежные вопросы