Android 完全退出整个应用 不在栈底也能退出

来源:互联网 发布:淘宝开店的基本流程图 编辑:程序博客网 时间:2024/05/16 18:44

上次做了个不在栈底退出应用(a->b->c 直接在c退出) 在网上找了很多方法 最常见额是 建一个ArrayList<Activity> list 的集合存储 已经存在的Activity 每打开一个activity就在list集合中加入,退出时就移除 假如你的手机配置足够好 在一定的时间内 那么这样的方法可能没什么问题 能够推出整个app  还有的方法是通过报错强制关闭app 还有通过killbackground 反正我本人表示没有成功(退出按钮不在栈顶的情况下)但是如果你的手机运存不是足够的大 那么你的程序长期处于后台就有可能被回收 被回收时 你的存放Activity的list集合就被重新初始化 如上面所说 加入你在c界面时把app切换到了后台 那么此时你失去了list 与a b 连个Activity的关联 这时候你在c界面点击退出App 你会发现你回到了b 并没有像想象中那样退出app。
说说我的解决方法吧
新建一个没有界面的Activity

<activity     android:name=".ExitActivity"     android:label="@string/title_activity_exit"     <span style="color:#ff0000;">android:launchMode="singleTop"     android:theme="@android:style/Theme.NoDisplay"</span> ></activity>

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;public class ExitActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState,R.layout.activity_exit);}@Overridepublic void initView() {Log.e("ExitActivity", "initView");if (infoUtil.isExit()) {Log.e("ExitActivity", "退出APP");infoUtil.setExit(false);finish();} else {Intent intent = new Intent(this,V2MainActivity.class);startActivity(intent);}}@Overridepublic void addListener() {}@Overrideprotected void onNewIntent(Intent intent) {// TODO Auto-generated method stubLog.e("ExitActivity", "onNewIntent");super.onNewIntent(intent);// 退出if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {infoUtil.setExit(false);finish();}}}


当然我这里是考虑到切换账号 所以我在登录成功后跳转界面时 跳转到了这个ExitActivty 如果不是退出我将清除所有的Activity 来达到重新加载新用户的资料和界面

如果不需要切换账号的话 可以不用写我在initView里判断

在你需要退出的地方调用

Intent intent = new Intent(mContext,ExitActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  startActivity(intent);  finish();

有不对的地方欢迎指出


0 0
原创粉丝点击