想双击退出程序,却回到上一个activity的解决办法
2015-09-04 11:22
375 查看
我之前有两个博客介绍了应用的启动画面和双击退出程序的小demo,如果结合在一起看的话,即一个应用启动的时候,先加载一个启动的画面,几秒之后跳转到主界面,然后利用双击退出程序的代码实现退出程序,但是在实际操作中,当在主界面双击退出时,却并没有退出程序,而是返回到了上一个界面,即加载启动画面的界面,android的这种一层一层后退的方式和数据结构中的栈相似,换句话说android,就是利用栈的工作原理,即先进后出,或者说后进先出,运用到android里,即程序利用intent一层一层的打开界面,返回时,先回到最近打开的界面,然后一层一层往前递进,当返回到第一个界面时,再按返回便退出程序,所以会遇到双击退出时,却并没有退出程序,而是返回到了上一个界面,那么怎么让程序直接退出程序又不返回到上个界面呢?下面看代码:
加载启动画面的java代码:
加载启动画面的java代码:
package com.example.administrator.myapplication; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class ApplicationStartActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_application_start); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(ApplicationStartActivity.this, MainActivity.class); startActivityForResult(intent, 1);//第二个参数为requestCode 请求码 } }, 3000); } /** * 重写startActivityForResult()的回调方法 * * @param requestCode 请求码 * @param resultCode 结果码 * @param data intent携带的数据 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("TAG:", "1"); if (resultCode == 1) { Log.e("TAG:", "2"); ApplicationStartActivity.this.finish(); } } }主界面就只有一个双击退出程序的代码:
//再按一次退出程序,timeSpace = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (System.currentTimeMillis() - timeSpace > 2000) { timeSpace = System.currentTimeMillis(); Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); } else { setResult(1);//resultCode 结果码 finish(); } return true; }上面的代码就实现了直接退出程序,而不返回上一个界面的功能,主要代码为:
setResult(1);//resultCode 结果码
startActivityForResult(intent, 1);//第二个参数为requestCode 请求码setResult()方法官方文档解释为:Call this to set the result that your activity will return to its caller.说白了就是哪个activity启动的就返回给哪个activity,本例子中是
ApplicationStartActivity启动(打开)了MainActivity,所以这个方法直接返回到ApplicationStartActivity,还要注意的是:想接收到setResult()方法的返回值,必须要重写startActivityForResult()的回调方法,即
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { ......
...... }
在该方法里做退出本界面的操作,代码大致意思为:双击退出程序时,如果间隔小于2秒,则执行else里的语句,当执行到setResult(1);语句时,把结果码返回给上一个activity,上一个activity拿到结果码之后,如果是1,则进行startActivityForResult()的回调方法里的finish()操作,然后进行主界面的finish()操作,这样,就实现了双击退出程序而不会返回到上一个界面的功能.
相关文章推荐
- GDI+学习笔记9-绘制网站流量报表
- ubuntu下svn每次都要输入密码
- java基本知识小记(1)
- 剑指Offer 题目1515:打印1到最大的N位数
- 一线城市税前年入50w普遍是怎样一种生活状态
- bandwagon支付宝支付教程
- EOF与子过程返回
- Spring事务管理
- GDI+学习笔记8-GDI+介绍
- 【教程】详解VS2010安装流程
- 数据结构学习之路-第二章:一元多项式的表示及相加
- java读取xml文件
- android expandablelistview 展开动画
- office2013右键没有新建和office2013简历2003版本文件
- POJ 2122 Optimal Milking(二分+最大流)
- 35 Search Insert Position
- Caught an exception while getting the property… Struts2报错
- 企业化门户网站首页设计-初初初学者
- PAT(B) 1028. 人口普查
- 工厂方法模式(java 设计模式)