您的位置:首页 > 其它

想双击退出程序,却回到上一个activity的解决办法

2015-09-04 11:22 375 查看
我之前有两个博客介绍了应用的启动画面和双击退出程序的小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()操作,这样,就实现了双击退出程序而不会返回到上一个界面的功能.




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: