想双击退出程序,却回到上一个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
原创粉丝点击