This's one so easy again click one's exit , suitable for novices to use.
long preTime = 0; @Override public void onBackPressed() { if (System.currentTimeMillis() - preTime >2000){ preTime = System.currentTimeMillis(); Toast.makeText(mContext,"再点一次退出",Toast.LENGTH_SHORT).show(); }else { // System.exit(0); super.onBackPressed(); } }
下面这种是配合 Fragment 多加了判断:
long preTime = 0; @Override public void onBackPressed() { if (fragmentManager.getBackStackEntryCount() == 0){ if (isTaskTop(MainActivity.class.getSimpleName())){ LogUtils.e(mContext,"位于栈顶"); if (System.currentTimeMillis() - preTime >2000){ preTime = System.currentTimeMillis(); Toast.makeText(mContext,"再点一次退出",Toast.LENGTH_SHORT).show(); }else { // System.exit(0); super.onBackPressed(); } }else { LogUtils.e(mContext,"没有位于栈顶"); super.onBackPressed(); } }else { FragmentUtils.exitBackStack(fragmentManager); // fragmentManager.popBackStack(); } }private boolean isTaskTop(String currentActivityName){ LogUtils.e(mContext,"currentActivityName:"+currentActivityName); ActivityManager am = (ActivityManager) mContext.getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTaskInfoList = am.getRunningTasks(1); String topActivityName = null; if (null != runningTaskInfoList){ topActivityName = (runningTaskInfoList.get(0).topActivity).getShortClassName(); } LogUtils.e(mContext,"topActivityName:"+topActivityName); if (TextUtils.isEmpty(topActivityName)) return false; if (TextUtils.isEmpty(currentActivityName)) throw new IllegalArgumentException(); if (topActivityName.contains(currentActivityName)){ return true; }else { return false; } }public static void exitBackStack(FragmentManager fragmentManager){ Log.e("MainActivity","fragment出栈:"+preMainFragment.getClass().getSimpleName()); fragmentManager.popBackStack(); listFragment.remove(listFragment.size()-1); preMainFragment = listFragment.get(listFragment.size()-1); }