我想仅在按下主页按钮(当应用程序发送到后台时)时才运行代码。我尝试使用生命周期方法,但问题是它们也会在启动其他对话框/活动时执行。我只想检查应用程序是否发送到后台。我怎样才能做到这一点?
答案 0 :(得分:2)
在onOptionsItemSelected(MenuItem item);
中,检查点击的项目是否为主页按钮:
编辑:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
答案 1 :(得分:2)
Activity.onUserLeaveHint()
会因为用户操作(例如按主页按钮或切换应用程序)而将活动置于后台时触发您的活动。
答案 2 :(得分:0)
好吧,因为你正在编写代码,你可以在明确开始另一个活动时设置一些布尔标志,并检查你的活动何时通过onPause()......
如果它们是假的,则意味着其他人正在暂停您的活动。
也许不是最优雅的解决方案,但如果这是您遇到的唯一问题,它将会起作用。
答案 3 :(得分:0)
您可以拥有一个跟踪系统(基本上是一个计数器)来了解您的某个活动何时恢复和暂停,从而让您知道您的任何活动是否已打开。
这样您就可以知道您的应用是否“开放”。但这不仅适用于主页按钮,而是适用于后退按钮(最后一个关闭应用程序),甚至不会从通知栏中打开另一个应用程序。
答案 4 :(得分:0)
Android操作系统会杀死你的应用程序以释放资源,它不会一直留在后台。如果您希望自己的应用继续在后台运行,请使用service
答案 5 :(得分:0)
如果您想在按下主页按钮并且活动进入后台时执行此操作,则可以在活动上覆盖此项:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_HOME:
//somthing you want to do
default:
return super.onKeyUp(keyCode, event);
}
}
我正在使用KeyUp事件,因为当应用程序进入后台时,用户可以执行longPress,并且我认为您不想在应用程序仍处于打开状态时执行此方法。
答案 6 :(得分:0)
这是一种作弊的答案,但我觉得它更可靠。
按下主页按钮时始终调用的一种方法是任何程序活动中包含的任何surfacedestroyed的surfaceviews方法。
将要执行的代码放在那里,让方法指向您想要执行的另一个方法,或者让方法触发指向您要执行的方法的标志将完成这项工作。