想双击退出程序,却回到上一个activity的解决办法
来源:互联网 发布:淘宝我是卖家在哪里找 编辑:程序博客网 时间:2024/06/06 10:54
我之前有两个博客介绍了应用的启动画面和双击退出程序的小demo,如果结合在一起看的话,即一个应用启动的时候,先加载一个启动的画面,几秒之后跳转到主界面,然后利用双击退出程序的代码实现退出程序,但是在实际操作中,当在主界面双击退出时,却并没有退出程序,而是返回到了上一个界面,即加载启动画面的界面,android的这种一层一层后退的方式和数据结构中的栈相似,换句话说android,就是利用栈的工作原理,即先进后出,或者说后进先出,运用到android里,即程序利用intent一层一层的打开界面,返回时,先回到最近打开的界面,然后一层一层往前递进,当返回到第一个界面时,再按返回便退出程序,所以会遇到双击退出时,却并没有退出程序,而是返回到了上一个界面,那么怎么让程序直接退出程序又不返回到上个界面呢?下面看代码:
加载启动画面的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()操作,这样,就实现了双击退出程序而不会返回到上一个界面的功能.
0 0
- 想双击退出程序,却回到上一个activity的解决办法
- 主Activity双击退出程序
- 在使用fragment的activity双击点击退出程序
- 双击退出整个程序,以及双击退出本Activity
- 程序退出,会直接回到桌面 而不会 退出到先前的activity界面
- Android完全退出程序,不是返回到上一个Activity
- activity-双击退出
- 双击退出Activity
- Android双击退出及bug的解决办法
- 音量键的监听 双击退出程序
- Android实现双击退出程序的效果
- 双击返回退出程序
- 转:双击退出程序
- 双击退出程序
- 双击退出程序
- Android双击退出程序
- 双击退出程序
- 双击退出程序
- Web app root system property already set to different value:
- 古老的NET架构部署方案
- 16.解释器模式
- Leetcode 274 : H-index
- R con not resolved of types
- 想双击退出程序,却回到上一个activity的解决办法
- SQL删除重复数据方法
- 消除VS中对使用不安全函数的error
- 23种设计模式全解析
- Android之TabHost用法详解
- 17.访问者模式
- Hadoop集群假设
- linux基础笔记
- Java断言Assert的使用以及在Eclipse中使用assert