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

时间:2022-01-13 20:33:11

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