0

这里的情景:一个Android:nohistory标志被忽略

  1. 用户使用活动#1调度报警(使用了Android AlarmManager服务),并返回到主屏幕。活动#1保持堆叠状态。

  2. AlarmRecieveronReceived()按计划被称为:

    @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

一旦Activity不再可见,NO_HISTORY标志就会阻止此Activity出现在任务堆栈中。在您的情况下,如果您在显示Activity2时按HOME,您会看到Android立即在该活动中调用finish()onDestroy()(这不是任务放入后台时的常见行为)。

做你想做什么,你需要

android:excludeFromRecents="true" 

添加到清单项为您Activity。这告诉Android不要将您的任务放在最近的任务列表中。