Android(安卓)关闭非自身应用的界面
16lz
2021-01-25
需求:我们经常会打开非自身应用的界面,但是如何再帮助用户返回自身应用界面呢?
最近产品经理说要帮助用户在设置界面引导,所以很快用自定义Toast或者自定义窗体帮助完成了引导手势的操作。但是产品经理又提了一个新需求,能不能在帮助用户退出设置界面。 这里我想到了两个思路 :
1. 利用Activity的启动模式: 大家都知道Android的四种启动模式 standard singleTop
singleTask singleInstance 这里我就不一一介绍了,但是听起来用启动模式关闭非应用界面是不是有些诧异?别急,给你举例。 假如我们在A界面,我们先用默认的启动模式 standard 开启非自身应用界面B,然后再用启动模式singleTask开启界面A 这样就可以做到关闭非应用界面B了。
在A 界面种
public class A extends Activity {@Overrideprotected 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,每次启动该活动时,首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在就直接使用该实例,并把这个活动之上的所有活动统统出栈。 是不是豁然开朗了? 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;}}
好了,两种方法介绍完毕。
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- No.11 使用firewall配置的防火墙策略的生效模式
- Android(安卓)Apk反编译得到Java源代码
- 谜之RxJava (一) —— 最基本的观察者模式
- 安卓反编译揭秘(爱加密系列教程九)
- Android之Notification的多种用法
- Kivy A to Z -- 调试篇之在Android平台调试Python代码
- Flutter教程(一) 十分钟了解Flutter
- 五个维度:Android内存管理、优化