12

我已经对 SO 进行了一些阅读和搜索,但找不到清除当前活动堆栈的方法。我的应用程序的上下文是由后台服务/通知启动的活动。

想象一下,我的应用程序允许您组织人员列表。几个小时前,您在“查看”活动中查看人员 X,现在这是您堆栈的顶部。在未来的某个时候,服务会触发,我会为人员 Y弹出一个新的“通知”活动。从那里您可以编辑人员 Y 的详细信息。

当您完成此活动时,弹出堆栈并最终查看人 X 将是一种令人困惑的用户体验。理想情况下,我想回到用户正在做的任何事情(电子邮件等......),或者至少回到我的应用程序的家。

我尝试使用 "Notify" 开始,FLAG_ACTIVTY_NEW_TASK但这似乎没有帮助:当任务完成时,它只是返回到上一个任务。我想要的似乎是 Android 3 的 new FLAG_ACTIVITY_CLEAR_TASK,它在以前的 SDK 中不存在。

有没有人有实现这一目标的建议?

4

3 回答 3

20

他们都杀了

您可以通过使用来实现BroadcastReceivers

  • 创建一个BaseActivity这样的:

public class BaseActivity extends GuiceActivity {
    private KillReceiver mKillReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mKillReceiver = new KillReceiver();
        registerReceiver(mKillReceiver,
            IntentFilter.create("kill", "spartan!!!"));
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mKillReceiver);
    }
    private final class KillReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    }
}

  • 让你的活动扩展它BaseActivity
  • 每当您想清除堆栈时:

Intent intent = new Intent("kill");
intent.setType("spartan!!!");
sendBroadcast(intent);

于 2011-03-01T12:59:19.493 回答
6

如果您已经在堆栈中运行了应用程序主页的实例,则当活动 Y 完成时,您可以使用startActivity()标志启动应用程序的主页(使用 )FLAG_ACTIVITY_CLEAR_TOP。由于它已经在堆栈中,而不是创建它的新实例,这会将您带回应用程序的主页并清除其顶部的堆栈。

于 2011-03-01T13:00:35.340 回答
0

获取一个 ArrayList 并将所有活动对象保存到每个活动的 oncreate() 中的 arraylist 中。每当您想完成特定活动时,只需从 arraylist 中检索该活动实例并完成它。

于 2012-03-26T10:05:31.090 回答