一、Android中的“再按一次返回键退出程序”实现

用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dialog中的按钮。个人觉得“再按一次返回键退出程序”是best practice,实现也很简单,直接上代码: 

private long exitTime = 0;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){           if((System.currentTimeMillis()-exitTime) > 2000){              Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                                            exitTime = System.currentTimeMillis();           } else {            finish();            System.exit(0);        }        return true;       }    return super.onKeyDown(keyCode, event);}

 

二、Android再按一次完全退出程序代码

前言:

前面使用的退出程序用的是finish(),它只能退出当前Activity。如果Activity一多就不能一次性退出了。

1、退出应用程序工具类

/** *  * @author itas109 * TODO 用于完全退出应用程序  */ public class ExitAPPUtils extends Application {    private List activityList = new LinkedList();    private static ExitAPPUtils instance;       private ExitAPPUtils() {    }       // 单例模式中获取唯一的ExitAPPUtils实例    public static ExitAPPUtils getInstance() {        if(null == instance) {            instance =new ExitAPPUtils();        }        return instance;    }       // 添加Activity到容器中    public void addActivity(Activity activity) {        activityList.add(activity);    }       // 遍历所有Activity并finish       public void exit() {        for(Activity activity : activityList) {            activity.finish();        }        System.exit(0);    }}

2、使用方法

在每个Activity的onCreate方法里添加如下代码

ExitAPPUtils.getInstance().addActivity(this);

3、实现再按一次完全退出效果

退出代码,放到需要退出的Activity中。

//定义时间private long exitTime = 0;//退出代码,放到需要退出的Activity中。    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){             if((System.currentTimeMillis()-exitTime) > 2000){                 ToastUtils.show(getApplicationContext(), R.string.exit_hint);            exitTime = System.currentTimeMillis();         } else {            ExitAPPUtils.getInstance().exit();            //finish();            //System.exit(0);        }            return true;         }        return super.onKeyDown(keyCode, event);    }}

4、效果图

 

三、禁止返回上一个activity

有时候我们希望从一个activity离开后,按返回键不要再回去(如从登陆界面跳转后,不要再回到登陆界面),那么我们需要把这个activity从栈区中去除。考虑在activity A中调用 activity B,不允许从activity B中返回activity A:在页面跳转的时候使用下面的代码就可以了。

Intent intent=new Intent();intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);intent.setClass(A.this,B.class);startActivity(intent);

四、Android 只开启一个Activity实例

在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种。 

方法一:设置起动模式 
一个Activity有四种启动模式:standard, singleTop, singleTask, singleInstance。 
standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。 
singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。 
singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。 
singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。 

这些启动模式可以在功能清单文件中进行设置,中的launchMode属性。 

方法二:在intent中加标志 
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。 
代码如下:

Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);   intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   startActivity(intent);  

五、点击Home键后,在打开应用,应用会重新启动,而不是恢复到原来状态问题处理

android点击Home键后,在打开应用,应用会重新启动,而不是恢复到原来状态,在启动的actiivity中加入如下代码即可解决:

if (!isTaskRoot()) {   finish();   return;}

public boolean isTaskRoot()用来判断该Activity是否为任务栈中的根Activity,即启动应用的第一个Activity。

分析:正常情况下:

比如A页面为启动页面,打开B页面,这时按home键,然后再打开app,这时会在栈中会重新创建一个A页面,然后再打开B页面。

如果加上以上的判断代码:

比如A页面为启动页面,打开B页面,这时按home键,然后再打开app,还会new 一个A页面,但是会走if条件语句,这时A页面不是在栈底,所以finish掉,然后就露出下面的B页面了。

 

 

https://www.cnblogs.com/swx2017/p/7241108.html

https://www.2cto.com/kf/201501/368155.html

https://blog.csdn.net/qq_36464448/article/details/80464075 

https://blog.csdn.net/xiangyong2008/article/details/5782674

https://blog.csdn.net/lzq520210/article/details/52331119

 

 

 

更多相关文章

  1. 安全新手入坑——HTML标签
  2. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  3. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  4. Android一键加群实现
  5. android Ndk学习笔记01之Hello World!
  6. android离开一个页面时关闭子线程
  7. eclipse工具使用技巧&关联Android源码
  8. Android(安卓)NDK入门实例 计算斐波那契数列二生成.so库文件
  9. 【Android(安卓)开发教程】FrameLayout帧布局

随机推荐

  1. Delphi XE5 android toast
  2. Android(安卓)的网络编程(15)-Http JSon
  3. 问题小结(6)-listview滚动条相关
  4. [转] android 日期时间格式转换
  5. Delphi XE5 android toast
  6. Ubuntu .bashrc个人配置
  7. 2010.10.31———Android(安卓)04
  8. Android(安卓)Socket编程初探
  9. Android多媒体开发(2)————使用Android(
  10. Android(安卓)WebView与网页JS相互调用