0

我有一个覆盖 的活动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,但我不确定。

谢谢,
拉贾特

4

2 回答 2

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

从猴子文档中,如果我使用以下命令运行猴子

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

于 2013-04-30T08:58:00.147 回答
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);
    }
于 2013-04-29T07:20:08.670 回答