Home键


onkeydownonkeyup方法无法来捕获Home的动作,那么如何来捕获Home键呢?
大家都知道,按Home键程序并没有退出(窗口的生命周期只执行到onStop方法),只是切换到后台运行了。而按Back键或调用finish方法则关闭当前程序,当前窗口的生命周期也就结束了。系统会在调用onDestroy方法后释放窗口对象(但一些资源并未释放,如静态变量),按HomeBack键都执行的最后一个方法是onstop,所以很容易想到在onstop方法中处理按Home键的动作。
由于窗口不管以何种方式关闭(按Back键、执行finish方法等),都会调用Activity.finish方法,而且该方法是在调用窗口生命周期之前就调用了,也就是说调用onpause方法之前会首先调用finish方法。而按Home键系统并不会调用finish方法,所以覆盖finish方法,并在finish方法中设置标志即可解决这个问题。
代码如下:
public class CycleActivity extends Activity {
    //true :窗口退出       false:窗口切换到后台执行,并没有退出
    private boolean isFinished;
    protected void onStart()
    {
       Toast.makeText(this"窗口已经恢复", Toast.LENGTH_LONG).show();
       super.onStart();
    }
    //当窗口移到后台执行或退出时执行该方法
    protected void onStop()
    {
       //如果isFinished=false,表示当前窗口只是切换到后台运行,并没有退出
       if(!isFinished)
       {
           Toast.makeText(this"窗口已经在后台运行(按了Home键)!", Toast.LENGTH_LONG).show();
       }
       super.onStop();
    }
    //只要窗口退出,就一定会调用finish方法
    public void finish()
    {
       //设置标志
       isFinished=true;
       super.finish();
    }
}
总结:按Home键就相当于将当前程序切换到后台运行,而按Back键相当于退出程序,因此该问题也就转换成判断程序是否切换到后台运行的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值