Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity

Сообщение damager82 » 16 дек 2012, 23:00

В этом уроке:
- меняем поведение Activity в Task


Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:38, всего редактировалось 7 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение brucemax » 17 дек 2012, 15:02

Супер! Примеры шикарнейшие! Помню как разбирался в документации по этой теме.. в голове жуть что творилось, а тут так на блюдечке преподнесено.. =)

httpdispatch
Сообщения: 3
Зарегистрирован: 31 июл 2012, 10:38

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение httpdispatch » 26 дек 2012, 15:57

Замечательная статья. Спасибо

katso
Сообщения: 5
Зарегистрирован: 13 апр 2012, 08:03

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение katso » 24 фев 2013, 08:56

Если пользователь долгое время не использует свернутый таск, то система его чистит, за исключением корневого Activity.
Почему у меня не чистит его? загружается топАктивити и выполняет код из onCreate(). Жму назад появляется нижнее активити и тоже выполняет onCreate().

Norman
Сообщения: 5
Зарегистрирован: 24 июл 2013, 10:32

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение Norman » 25 ноя 2013, 17:36

Есть активити со сплешскрином. Разумеется хочу убрать его из хистори после демонстрации. Почитал статью и пришел к выводу (не знаю верному или нет), что флаги на активти можно устанавливать в манифесте. Ну и, согласно этой логике, нашел в манифесте пункт "No History" (FLAG_ACTIVITY_NO_HISTORY ???). В результате после демонстрации сплеша и запуска следующего активити получается следующий лог:
11-25 18:27:37.668: D/mytag(4201): ------------------ Показываю сплеш
11-25 18:27:37.668: D/mytag(4201): Count: 1
11-25 18:27:37.668: D/mytag(4201): Root: com.mifors.ida/.SplashScreenActivity
11-25 18:27:37.668: D/mytag(4201): Top: com.mifors.ida/.SplashScreenActivity
11-25 18:27:40.748: D/mytag(4201): ------------------ Запускаю активити
11-25 18:27:40.748: D/mytag(4201): Count: 2
11-25 18:27:40.758: D/mytag(4201): Root: com.mifors.ida/.SplashScreenActivity
11-25 18:27:40.758: D/mytag(4201): Top: com.mifors.ida/.RegistrationActivity
11-25 18:27:49.538: D/mytag(4201): ------------------
Судя по логу в таске два активити, но если нажать бекспейс - выбрасывает на home.
Собственно вопрос заключается в следующем - верна ли логика в том, чтобы проводить аналогию intent-флагов с атрибутами активити в манифесте и адекватно ли заявленному флагу работает ситуация?
Вложения
Снимок экрана 2013-11-25 в 18.29.28.png
Снимок экрана 2013-11-25 в 18.29.28.png (24.22 КБ) 17795 просмотров

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 14:13

у меня почему то вылетает на строке

list = am.getRunningTasks(10);

дебаг лог указывает на эту строку

разрешение в androidmanifest.xml

<uses-permission android:name="android.permission.GET_TASKS"/>

я прописал, но все равно задача вылетает :(

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение adarash » 13 мар 2014, 15:26

логи?

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 15:53

все уже нашел ошибку спасибо за отзыв :)

но есть другой вопрос по этой теме

как получить Task ID (TID)

я делаю так MyTID=task.id;

и мне выдается какой то левый двухзначный номер, а хочется получить именно тот TID который отображается в дебаг логах.

это я делаю в теле цикла

list = am.getRunningTasks(10);
for (RunningTaskInfo task : list) {

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение altwin » 13 мар 2014, 16:09

[syntax=java5]try
{
List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
int numOfTasks = tasks.size();
for(int i = 0; i < numOfTasks; i++)
{
ActivityManager.RunningAppProcessInfo task = tasks.get(i);
try
{
PackageInfo myPInfo = getPackageManager().getPackageInfo(task.processName, 0);
//Log::task.processName
}
catch (PackageManager.NameNotFoundException ne)
{
ne.printStackTrace();
}
}
}
catch (SecurityException se)
{
se.printStackTrace();
}[/syntax]
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 16:23

на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение altwin » 13 мар 2014, 16:52

n0tb0dy писал(а):на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?
task.processName == содержит имя процесса.
myPInfo - это объект ( http://developer.android.com/intl/ru/re ... eInfo.html ) у которого вызывается метод getPackageInfo(), в который передается имя процесса. Такова java :)
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 16:59

но мне же нужен не PID и не имя процесса, а TID (Task ID)

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 17:03

подпись у вас на пять баллов! )))) долго смеялся

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 17:12

Хорошо, может просто тогда подскажите как в этот код добавить чтобы еще в логах выводился TID (Task ID), ну и до кучи PID. Хотя это и отображается в колонках дебагера, но сильно нужно мне для понимания сей темы.

Код: Выделить всё

public void onInfoClick(View v) {
    list = am.getRunningTasks(10);
    for (RunningTaskInfo task : list) {
      if (task.baseActivity.flattenToShortString().startsWith("ru.startandroid.develop.p116")){
      Log.d(LOG_TAG, "------------------");
      Log.d(LOG_TAG, "Count: " + task.numActivities);
      Log.d(LOG_TAG, "Root: " + task.baseActivity.flattenToShortString());
      Log.d(LOG_TAG, "Top: " + task.topActivity.flattenToShortString());
      }
    }
  }
То есть надо добавить что-то типа:

Log.d(LOG_TAG, "TID: " + task.getTID());
Log.d(LOG_TAG, "PID: " + task.getPID());

то что выделил красным... это просто ради красного словца :)

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение altwin » 13 мар 2014, 17:40

значит вместо RunningAppProcessInfo, нужно использовать в List RunningTaskInfo и идти по нему итератором вызывая description или id или что там у него еще есть :)

P.S. подпись не моя, это копипаст от Мартина Голдинга
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 20:55

ну вот мы и вернулись на круги своя :)

я же с этого и начинал

public void onInfoClick(View v) {
list = am.getRunningTasks(10);
for (RunningTaskInfo task : list) {
if (task.baseActivity.flattenToShortString().startsWith("ru.startandroid.develop.p116")){
Log.d(LOG_TAG, "------------------");
Log.d(LOG_TAG, "Count: " + task.numActivities);
Log.d(LOG_TAG, "Root: " + task.baseActivity.flattenToShortString());
Log.d(LOG_TAG, "Top: " + task.topActivity.flattenToShortString());
}
}
}

я делаю так MyTID=task.id;

и мне выдается какой то левый двухзначный номер, а хочется получить именно тот TID который отображается в дебаг логах.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 13 мар 2014, 20:58

если сделать так

Log.d(LOG_TAG, "TID: " + task.id);

то выводится двухзначное число а не TID который в дебагере

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 14 мар 2014, 12:00

и так походу ни кто не в курсе как получить TID в приложении :(

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 14 апр 2014, 18:39

Добрый день!

Я таки продолжаю мучить тему тасков, активностей и стека.

Написал по мотивам урока 116 два приложения: AP0003 и AP0004

Активность А из приложения AP0004, запускает Активность C из приложения AP0003 с настройками по умолчанию.

Все идет как надо, все запускается. Но мне не понятно почему в отладчике видно что Активности А и C находятся в разных процессах (PID) и в разных тасках (TID)?

Хотя Task.ID вытащенный из кода одинаковый и он имеет двузначное значение в то время как TID в логах имеет четырехзначное значение.

Привожу скрин логов.
S0043.png
S0043.png (70.48 КБ) 17747 просмотров
Может меня кто-то посвятить в этом вопросе?

инфу о тасках вытаскиваю как в уроке

[syntax=java]
for (RunningTaskInfo task : list) {
if (task.baseActivity.flattenToShortString().startsWith(
"com.example.ap0004")) {
[/syntax]

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc

Сообщение n0tb0dy » 15 апр 2014, 14:07

и еще может кто подскажет как зная TaskID получить имя корневой активности для данной задачи, а так же количество активностей в ней?

Ответить