上次做了个不在栈底退出应用(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();
有不对的地方欢迎指出