【问题标题】:How to use "Intent.FLAG_ACTIVITY_CLEAR_TASK" on pre-honeycomb devices?如何在预蜂窝设备上使用“Intent.FLAG_ACTIVITY_CLEAR_TASK”?
【发布时间】:2023-03-10 06:20:02
【问题描述】:

背景

我需要在某些事件上启动一个活动(如通知点击,但它可以是任何其他事件,甚至来自广播接收器),如果它们正在运行,也将关闭所有其他活动,或者至少不给关注他们。

为此,我使用Intent.FLAG_ACTIVITY_CLEAR_TASK 标志。

问题

似乎 Intent.FLAG_ACTIVITY_CLEAR_TASK 标志仅适用于 API 11 (honeycomb) 及更高版本。

一些网站声称IntentCompat 可以提供帮助,但即使那里的文档也明确指出:

仅在支持 API 11 或更高版本的设备上才会遵守此标志。

遗憾的是,我找不到任何使用 IntentCompat 函数的示例,并且描述与意图标志文档一样模糊和混乱

问题

我该如何克服这个问题?

我真的应该为每个活动添加一个LocalBroadcastManager 来监听这个事件,并在它发生时关闭它们自己吗?

也许我在这里遗漏了什么? IntentCompat 类上显示的其他功能是什么?也许其中一个可以帮助解决这个问题?

请帮忙。


编辑: 似乎Intent.FLAG_ACTIVITY_MULTIPLE_TASK 所做的工作不是专注于以前的活动,但文档对其工作原理的描述非常模糊,并且对此也有很多警告。

我注意到,即使我们关闭了新的活动,应用程序的前一个任务也不会获得焦点,所以它会回到用户之前访问过的地方。

有谁知道这个标志是如何工作的,我应该知道什么?在这种情况下使用是否安全?

如果我找不到任何其他解决方案,我想我会添加它作为答案。

【问题讨论】:

    标签: android android-intent android-3.0-honeycomb


    【解决方案1】:

    你可以使用

           intent.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
               Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    

    或者您也可以在所有活动中使用 BroadcastReciver..

      public class MyActivity extends Activity {
         private FinishReceiver finishReceiver;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finishReceiver = new FinishReceiver();
        registerReceiver(finishReceiver,
                IntentFilter.create("Finish", "XYZ"));
      }
    
      @Override
      protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(finishReceiver);
      }
    
       private final class FinishReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
      }
     }
    

    清除堆栈:

               Intent intent = new Intent("Finish");
               intent.setType("XYZ");
               sendBroadcast(intent);
    

    【讨论】:

    • 如果您关心代码质量,向所有活动添加广播确实是一个糟糕的解决方案..
    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多