finish() не работает при использовании инструмента Android Monkey

У меня есть активность, которая отменяет 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

2 ответа

Решение

Мне удалось выяснить, в чем проблема. Есть некоторая дополнительная информация, которую я должен был упомянуть в своем вопросе. Это были журналы для инструмента обезьяны:

// 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 Приложение не имеет разрешения на запуск.

Попробуй это...

@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);
    }
Другие вопросы по тегам