【问题标题】:An android:nohistory flag being ignored一个 android:nohistory 标志被忽略
【发布时间】:2015-12-28 03:25:44
【问题描述】:

场景如下:

  1. 用户使用 Activity#1 安排闹钟(使用 android AlarmManager 服务),然后返回主屏幕。 Activity#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. Activity#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() Activity#2。

  5. 系统按预期返回主屏幕,但 Activity#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 标志是必需的,因为 Activity#2 是从 AlarmReceiver 而不是另一个 Activity 启动的。

【问题讨论】:

    标签: android android-intent android-activity android-lifecycle android-task


    【解决方案1】:

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

    要做你想做的,你需要添加

        android:excludeFromRecents="true"
    

    到您的Activity 的清单条目。这告诉 Android 不要将您的任务放在最近的任务列表中。

    【讨论】:

    • 不知道 android:excludeFromRecents。谢谢。
    猜你喜欢
    • 2021-01-27
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多