安卓---连续点击两次返回键退出程序---二级界面的退出程序

法一:实现方式,通过记录按键时间计算时间差实现:

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class MainActivity extends Activity {

    private long exitTime = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }

    public void exit() {
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次退出程序",
                    Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0);
        }
    }

}

演示效果:

到 这里其实就已经实现了,但是很多人的本意并不是在主界面连续点两次返回键退出程序,他们可能进入程序就是登陆界面,在返回的时候不希望返回登陆界面,跳过 它而直接退出程序,这个时候,上面的代码就仅仅只能返回上一个界面,即登陆界面!在我们调试程序的时候发现finish(); System.exit(0);确实让程序有了退出的效果,但是给人一种错觉好像自动重启了,这个要涉及activity的生命周期问题,每个 activity都有自己的生命周期,activity是单独的,用于处理用户操作,所以虽然finish(); System.exit(0);代码执行了,但只是让当前的activity结束了,但是其他还处于活跃期的activity却不会结束,这就是我们所看 到的,好像是返回上一个界面或者软件重启了。

以上纯属个人见解,如果错误欢迎指教。

关于activity的详细介绍大家可以自行百度,也可以参考这篇文章http://www.cnblogs.com/lyp3314/archive/2011/11/10/2244971.html

2.好了下面直接演示怎么样直接在二级界面退出程序

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class ejjm extends Activity {

    private long exitTime = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ejjm);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }

    public void exit() {
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次退出程序",
                    Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0);
        }
    }

}

主函数类

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

	btn=(Button) findViewById(R.id.button1);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent intent=new Intent(MainActivity.this,ejjm.class);
				MainActivity.this.startActivity(intent);
				finish();//这里如果不写finish就会有返回的效果
			}
		});
    }
}

activity_main.xml和ejjm.xml里面的内容我就不展示了,这里只是做了一个简单的跳转而已,在activity_main.xml只放了一个button而已

演示效果:(想要的画面)

Intent intent=new Intent(MainActivity.this,ejjm.class);

MainActivity.this.startActivity(intent);

finish();//这里如果不写finish就会有返回的效果,而不能退出程序
演示如下:

法二:实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。

在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在
Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为
true,则会执行退出的方法。具体我就不写了,可以参考下面的微博

http://blog.sina.com.cn/s/blog_4fd2a65a0101gg2o.html

时间: 2024-10-11 00:55:39

安卓---连续点击两次返回键退出程序---二级界面的退出程序的相关文章

Android连续点击两次返回键退出应用,提示“再按一次退出应用"

// 定义一个long型变量,用于判断两次点击的间隔 private long exitTime: // 实现返回键的点击事件 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); // 在这里进行点击判断 return false; } return super.onKeyDown(keyCode, event); } public void

安卓点击两次返回键退出程序

退出部分的代码: 1 private void exit() { 2 if (!isExit) { 3 isExit = true; 4 Toast.makeText(getApplicationContext(), "再按一次退出程序", 5 Toast.LENGTH_SHORT).show(); 6 // 利用handler延迟发送更改状态信息 7 mHandler.sendEmptyMessageDelayed(0, 2000); 8 } else { 9 Utils.logou

android连续点击两次返回键退出代码

private long exitTime = 0; @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getA

android实现点击两次返回键实现退出功能

在使用android平台的app是我们经常会发现点击两次返回键会提示是否退出的功能,下面讲讲此功能是如何实现的(此方法比较简单) 第一种方法是对系统返回键进行监听,定义一个变量记录按键时间,通过计算时间差来实现该功能,代码如下: //退出时的时间private long mExitTime;//对返回键进行监听@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCO

【转】Android实现点击两次返回键退出

在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法. 在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在 Handler中将此值还原成false.如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此

Android实现点击两次返回键退出

在做android应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 原理: 监听back键的按下,需要重写onKeyDown()方法,判断两次按下的时差,如果小于2秒,就退出,反之亦然. 第一种: package com.example.appexitdemo; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import a

点击两次返回键退出程序

总的来说,实则是使用onKeyDown方法进行监听按钮点击事件,并作出相应处理,一共有两种方式实现该功能. 第一种是使用消息传递机制,使用Handle()传递消息的间隔时间内若进行了再次点击返回键则退出程序 代码如下: 1 private static boolean isExit = false; 2 3 Handler mHandler = new Handler(){ 4 5 @Override 6 public void handleMessage(Message msg) { 7 //

android程序 点击两次返回键程序退出

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click(); } return false; } /** * 双击退出函数 */ private static Boolean isExit = false; private void exitBy2Click() { Timer tExit = null; if (is

【Android笔记】Android中实现“点击两次返回键退出”

用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dialog中的按钮.个人觉得“再按一次返回键退出程序”是best practice,实现也很简单,直接上代码: 1 private long exitTime = 0; 2 3 @Override 4 public boolean onKeyDown(int keyCode, KeyEvent event