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不要將您的任務放在最近的任務列表中。