我有一项覆盖onBackPressed()
的活动,在此功能中,我明确地调用finish()
,因为我需要在应用退出之前进行一些清理。
当我正常运行应用程序并点击BACK
键时,该应用程序会正常退出。
当我使用以下命令运行猴子工具时,
adb shell monkey -v --pct-syskeys 100 -p com.my.app 100
根据日志,调用onBackPressed()
函数,但finish()
不会关闭活动/应用。我一直试图弄清楚问题是什么,但到目前为止还没有。任何帮助表示赞赏。
编辑:
根据评论,我发布了onBackPressed()
代码:
@Override
public void onBackPressed() {
if (bIsBackKeyPressed)
return;
// do some clean up
bIsBackKeyPressed = true;
finish();
}
我使用bIsBackKeyPressed
标志的原因是因为猴子工具多次发送BACK
密钥。
这可能与其他按键以及BACK
键一起发生,但我不确定。
谢谢,
Rajath
答案 0 :(得分:1)
我能够找出问题所在。我应该在我的问题中提到一些额外的信息。这是猴子工具的日志:
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.my.app/.main.MainActivity } in package com.my.app
// Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.htc.launcher/.Launcher } in package com.htc.launcher
从猴子文档中,如果我使用以下命令运行monkey
adb shell monkey -v --pct-syskeys 100 -p com.my.app -p com.htc.launcher 100
然后就可以了。请注意,我添加了以下内容:-p com.htc.launcher
因此,通过不提供其他参数会发生什么,当BACK
发送到应用时,清除工作在onBackPressed()
进行,但finish()
未被调用因为com.htc.launcher
应用程序未获得运行权限。
答案 1 :(得分:0)
试试这个......
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK)
{
if (!bIsBackKeyPressed)
{
bIsBackKeyPressed = true;
finish();
}
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}