and*_*per 7 android clear android-intent android-3.0-honeycomb
我需要在某些事件上开始活动(比如通知点击,但它可以是任何其他事件,甚至是来自broadcastReceiver),如果它们正在运行,它们也会关闭所有其他活动,或者至少不关注它们.
为此,我使用Intent.FLAG_ACTIVITY_CLEAR_TASK标志.
似乎Intent.FLAG_ACTIVITY_CLEAR_TASK标志仅适用于API 11(蜂窝)及以上版本.
一些网站声称IntentCompat可以提供帮助,但即便有文档特别说:
仅在支持API 11或更高版本的设备上才会遵循此标志.
遗憾的是,我找不到使用IntentCompat函数的任何示例,并且描述与intents标记文档一样模糊和混乱
我该如何克服这个问题?
我应该为每个活动添加一个LocalBroadcastManager来监听这个事件,并在发生这种情况时关闭它们自己吗?
也许我在这里遗漏了什么?IntentCompat类中显示的其他函数是什么?也许其中一个可以帮忙吗?
请帮忙.
编辑:似乎Intent.FLAG_ACTIVITY_MULTIPLE_TASK完成了不关注以前活动的工作,但文档对其工作方式有一个非常模糊的描述,并且它也有很多关于它的警告.
我注意到的是,即使我们关闭新活动,应用程序的上一个任务也不会成为焦点,因此它将返回到用户之前访问过的位置.
有谁知道这面旗帜是如何运作的,我该怎么知道呢?在这种情况下使用是否安全?
如果我找不到任何其他解决方案,我想我会将其添加为答案.
Jam*_*aaz -2
您可以使用
intent.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Run Code Online (Sandbox Code Playgroud)
或者您也可以在所有活动中使用 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
用于清除堆栈:
Intent intent = new Intent("Finish");
intent.setType("XYZ");
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |