清空Activity Task栈

最近在做Launcher与业务模块之间的跳转,为了保证模块跳转以及返回正常,点击Home键后需要清空业务模块的Activity Task栈。

实现方式:

  1. 自定义一个ActivityManager管理类,用于管理栈中的Activity,这个需要跳转的过程中配合Flag使用,可以参考http://www.cnblogs.com/zl1991/p/6307580.html实现。

  2. 单纯通过跳转的Flag去控制清空栈:
    Intent intent = newIntent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
    intent.setClass(MainActivity.this,Activity.class);
    startActivity(intent);

    实测效果不好,难道是姿势不对?

  3. 最终我是通过将打开的activity记录下来,在合适的时机将其从栈内移除。
    (1)在Application初始化存储所有打开activity的集合。

public class App extends Application {
    public static App app;
    /**
     * 用于存储所有打开activity的集合
     */
    private final LinkedList<Activity> mActivitys = new LinkedList<>();

    @Override
    public void onCreate() {
        super.onCreate();
        app = this;
    }

    /**
     * Activity开启时添加Activity到集合
     *
     * @param activity
     */
    public void addActivity(Activity activity) {
        mActivitys.addFirst(activity);
    }

    /**
     * Activity退出时清除集合中的Activity.
     *
     * @param activity 被移除的activity
     */
    public void removeActivity(Activity activity) {
        mActivitys.remove(activity);
    }

    /**
     * 清除 除了自己外其他activity
     *  @param oneself 不被移除的activity
     */
    public void removeOtherActivity(Activity oneself) {
        try {
            for (Activity activity : mActivitys) {
                if (activity!=null && !activity.getLocalClassName().equals(oneself.getLocalClassName())){
                    activity.finish();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 退出应用时调用
     */
    public void exit() {
        for (Activity activity : mActivitys) {
            if (activity!=null){
                activity.finish();
            }
        }
    }
}

(2)在BaseActivity中调用,如果没有BaseActivity那么只能在每个activity中添加了:

public class BaseActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        App.app.addActivity(this);
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onDestroy() {
        App.app.removeActivity(this);
        super.onDestroy();
    }
}

(3)在合适的时机调用

    App.app.removeOtherActivity(this);//从桌面进入,移除栈内除了自己之外所有的activity

或者调用

 App.app.exit();//清空所有Activity
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值