Android 获取所有Activity,这里演示了用户按两次back键退出app
来源:互联网 发布:怎么进windows pe 编辑:程序博客网 时间:2024/06/06 19:41
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return true; } return super.onKeyDown(keyCode, event); } private void exit() { Log.d(TAG, "exit: "+(System.currentTimeMillis() - clickTime)); if ((System.currentTimeMillis() - clickTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次后退键退出程序", Toast.LENGTH_SHORT).show(); clickTime = System.currentTimeMillis(); } else { Log.e(TAG, "exit application"); AppData.setloginUser(this,""); // this.finish(); List<Activity> la = getActivitiesByApplication(getApplication()); for (int x=0;x<la.size();x++){ la.get(x).finish(); } android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } } private static List<Activity> getActivitiesByApplication(Application application) { List<Activity> list = new ArrayList<>(); try { Class<Application> applicationClass = Application.class; Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk"); mLoadedApkField.setAccessible(true); Object mLoadedApk = mLoadedApkField.get(application); Class<?> mLoadedApkClass = mLoadedApk.getClass(); Field mActivityThreadField = mLoadedApkClass.getDeclaredField("mActivityThread"); mActivityThreadField.setAccessible(true); Object mActivityThread = mActivityThreadField.get(mLoadedApk); Class<?> mActivityThreadClass = mActivityThread.getClass(); Field mActivitiesField = mActivityThreadClass.getDeclaredField("mActivities"); mActivitiesField.setAccessible(true); Object mActivities = mActivitiesField.get(mActivityThread); // 注意这里一定写成Map,低版本这里用的是HashMap,高版本用的是ArrayMap if (mActivities instanceof Map) { @SuppressWarnings("unchecked") Map<Object, Object> arrayMap = (Map<Object, Object>) mActivities; for (Map.Entry<Object, Object> entry : arrayMap.entrySet()) { Object value = entry.getValue(); Class<?> activityClientRecordClass = value.getClass(); Field activityField = activityClientRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Object o = activityField.get(value); list.add((Activity) o); } } } catch (Exception e) { e.printStackTrace(); list = null; } return list; }
阅读全文
0 0
- Android 获取所有Activity,这里演示了用户按两次back键退出app
- android 点击两次back 键退出app
- Android 按两次back键退出
- Android 两次按Back键退出应用
- Android简单实现连点两次Back键退出App
- Android实现点击两次back退出APP
- Android back键两次退出
- android 连按两次Back键退出 (单Activity多Fragment,保留根Fragment)
- 点击两次Back退出Activity
- Android小技巧: 这里涵盖了所有实现 “一键退出 App” 的方法
- Android 小技巧: 这里涵盖了所有实现 “一键退出 App” 的方法
- Android 按两次back键退出 -- 效率最高版
- Android 按两次back键退出 -- 效率最高版
- Android 按两次back键退出 -- 效率最高版
- Android 按两次back键退出 精简、高效!
- android 实现按两次back键提示退出应用界面
- android 连按两次Back键退出应用
- android按两次back退出程序!
- react创建webpack服务器
- 二进制的算法题
- GreenDao的简单使用
- Java IO最详解
- 〖计划〗总结 & 计划12月/放寒假前
- Android 获取所有Activity,这里演示了用户按两次back键退出app
- GreenDao简单了解
- 未来,始于远见
- 【程序人生】2014年最流行前端开发框架对比评测
- 大数据开发是先学习Hadoop还是spark,看10万程序猿所留下的结论
- 深度学习--Tensorflow初体验
- 各大平台的推荐系统原来是靠他来完成的,太牛了
- Hadoop 环境设置
- 常用Python网站