#android #android-activity #android-widget #instance
#Android #android-активность #android-виджет #экземпляр
Вопрос:
Я хотел бы запустить свое приложение activity при нажатии кнопки в моем виджете.
Я использую этот код:
Intent launchApp = context.getPackageManager()
Intent launchApp = context.getPackageManager()
.getLaunchIntentForPackage("com.sexy.code");
launchApp.setData(Uri.parse(listItemClickIntent
.toUri(Intent.URI_INTENT_SCHEME)));
pIntent = PendingIntent.getActivity(context, 0, launchApp,
PendingIntent.FLAG_UPDATE_CURRENT);
Моя проблема заключается в сценарии, в котором мое приложение уже работает в фоновом режиме, поэтому все выглядит нормально, пока я не закрою это действие, которое открылось, и не обнаружу за ним другое. Это похоже на то, что мне нужно дважды выйти из приложения.
Как мне этого избежать?
Комментарии:
1. пожалуйста, ознакомьтесь с документацией по режиму запуска манифеста Android для activity
2. Режим запуска @Jesus Dimrix — не лучшая практика
Ответ №1:
Попробуйте это:
launchApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Из документации для FLAG_ACTIVITY_CLEAR_TOP:
Если установлено, и запускаемое действие уже выполняется в текущей задаче, то вместо запуска нового экземпляра этого действия все другие действия поверх него будут закрыты, и это намерение будет передано (теперь сверху) старому действию как новое намерение.
Этот флаг также можно комбинировать с FLAG_ACTIVITY_NEW_TASK, как в:
launchApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
Вы также можете использовать их по отдельности, в зависимости от желаемого поведения.
Комментарии:
1. Ответ Николая Асташонка отлично работает, есть ли какая-либо причина использовать ваш способ вместо этого?
2. FLAG_ACTIVITY_NEW_TASK работает так же, как launchMode=singleTask . Это просто вопрос предпочтений, хотите ли вы сделать это в коде или в XML.
Ответ №2:
Как насчет использования флага режима запуска:
android:launchMode="singleTask"
Ваше действие должно выглядеть так:
<activity
android:name=".YourActivity"
android:launchMode="singleTask"
android:configChanges="orientation|screenSize" >
Комментарии:
1. это не лучшая практика, при создании фрагмента у всех была эта проблема, причина в savedInstanceState при повороте мобильного устройства он будет создавать экземпляр снова и снова, каждый раз, когда вы хотите проверить savedInstanceState != null или нет