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


最近产品经理说要帮助用户在设置界面引导,所以很快用自定义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;}}

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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. No.11 使用firewall配置的防火墙策略的生效模式
  3. Android(安卓)Apk反编译得到Java源代码
  4. 谜之RxJava (一) —— 最基本的观察者模式
  5. 安卓反编译揭秘(爱加密系列教程九)
  6. Android之Notification的多种用法
  7. Kivy A to Z -- 调试篇之在Android平台调试Python代码
  8. Flutter教程(一) 十分钟了解Flutter
  9. 五个维度:Android内存管理、优化

随机推荐

  1. Android(安卓)ActionBarSherlock的使用
  2. android焦点问题
  3. Android(安卓)Studio启动时出现unable to
  4. Android(安卓)开发中使用 SQLite 数据库
  5. android menu菜单
  6. AVD(android virtual device)路径设置
  7. 在Android上本机运行的服务器
  8. Android(安卓)全自动js脚本测试 Appium教
  9. 【Android】数据存储之Shared Preference
  10. 用自定义 LayoutManager 实现 Android(安