上次做了个不在栈底退出应用(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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState,R.layout.activity_exit); } @Override public 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); } } @Override public void addListener() { } @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub Log.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();
有不对的地方欢迎指出