Android 关闭非自身应用的界面

需求:我们经常会打开非自身应用的界面,但是如何再帮助用户返回自身应用界面呢?


最近产品经理说要帮助用户在设置界面引导,所以很快用自定义Toast或者自定义窗体帮助完成了引导手势的操作。但是产品经理又提了一个新需求,能不能在帮助用户退出设置界面。 
这里我想到了两个思路 :

1. 利用Activity的启动模式:
大家都知道Android的四种启动模式
standard 
singleTop
singleTask
singleInstance
这里我就不一一介绍了,但是听起来用启动模式关闭非应用界面是不是有些诧异?别急,给你举例。 
假如我们在A界面,我们先用默认的启动模式 standard 开启非自身应用界面B,然后再用启动模式singleTask开启界面A 这样就可以做到关闭非应用界面B了。

在A 界面种
public class A extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_item);
		Intent i = new Intent(this,B.class);
		startActivity(i);
	}

}
在自身应用service或者广播接收器中,在需要的时刻开启如下代码,就可以关闭了。
Intent i = new Intent(this,A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

singleTask:当活动的启动模式指定为singleTask,每次启动该活动时,首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在就直接使用该实例,并把这个活动之上的所有活动统统出栈。Android 关闭非自身应用的界面_第1张图片
是不是豁然开朗了?
2. 利用Android 自带的Process.killProcess(),传入界面的非自身应用的uid即可。可以用如下代码 遍历当前手机的栈信息获得,这里只给出关键代码
	ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
		ApplicationInfo appinfo = getApplicationInfo();
		List run = am.getRunningAppProcesses();
		for (RunningAppProcessInfo runningProcess : run) {
			if ((runningProcess.processName != null) && runningProcess.processName.equals(appinfo.processName)) {
				uid = String.valueOf(runningProcess.uid);
				break;
			}
		}

好了,两种方法介绍完毕。

你可能感兴趣的:(Android)