今天是个特殊的日子,先追忆一下张国荣先生。
下面是正题,如何让你的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 返回桌面即可