简单优雅的让你的app一直运行在后台



今天是个特殊的日子,先追忆一下张国荣先生。



下面是正题,如何让你的app一直运行在后台。
核心思想:捕获 onKeyDown的“Back”事件
其实“一直”这个词并不妥当,没有哪个用户会希望某个程序一直存在在任务栏,万一手机出现卡顿的问题那么他很可能会把锅直接甩给你,这就尴尬了。所以我们要的就是,不让用户点“返回”键直接退掉应用即可,当用户在任务栏清理掉我们的时候,也不要让service重启app就可以了。话不多说,直接上代码。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        FragmentManager fm = getSupportFragmentManager();
        int count = fm.getBackStackEntryCount();
        if (keyCode == KeyEvent.KEYCODE_BACK) {
       
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addCategory(Intent.CATEGORY_HOME);
                startActivity(intent);
                return true;//不执行父类点击事件
            }
            return super.onKeyDown(keyCode, event);//继续执行父类其他点击事件
}
代码很简单,我们捕获BACK键的点击事件,不去执行BACK键应有的操作,而是通过代码的修改,执行HOME键的操作,
那么当用户点击了BACK键想结束应用,其实是点了HOME键,都是回到了桌面。
 
 
如果你的Activity上静态添加了若干fragment的话,那么代码如下:
 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        FragmentManager fm = getSupportFragmentManager();
        int count = fm.getBackStackEntryCount();
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (count != 0) {
            
} else { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); return true;//不执行父类点击事件 }
            return super.onKeyDown(keyCode, event);
}
我们需要判断一下子,如果返回栈里有东西的话,不能让app直接回到桌面,所以返回父类的点击事件,else 返回桌面即可

 
 
 
 
 
 










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值