我之前有两个博客介绍了应用的启动画面和双击退出程序的小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()操作,这样,就实现了双击退出程序而不会返回到上一个界面的功能.
本文介绍在Android应用中,如何处理双击退出程序时避免返回上一个Activity的问题。当从主界面双击退出时,程序不应返回启动画面,而是直接退出。通过理解Android的栈式返回原理,可以找到正确实现这一功能的方法。
1万+

被折叠的 条评论
为什么被折叠?



