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);
}