Страница 1 из 2

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

Добавлено: 16 дек 2012, 23:00
damager82
В этом уроке:
- меняем поведение Activity в Task


Click here to read this article!

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

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

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

Добавлено: 26 дек 2012, 15:57
httpdispatch
Замечательная статья. Спасибо

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

Добавлено: 24 фев 2013, 08:56
katso
Если пользователь долгое время не использует свернутый таск, то система его чистит, за исключением корневого Activity.
Почему у меня не чистит его? загружается топАктивити и выполняет код из onCreate(). Жму назад появляется нижнее активити и тоже выполняет onCreate().

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

Добавлено: 25 ноя 2013, 17:36
Norman
Есть активити со сплешскрином. Разумеется хочу убрать его из хистори после демонстрации. Почитал статью и пришел к выводу (не знаю верному или нет), что флаги на активти можно устанавливать в манифесте. Ну и, согласно этой логике, нашел в манифесте пункт "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-флагов с атрибутами активити в манифесте и адекватно ли заявленному флагу работает ситуация?

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

Добавлено: 13 мар 2014, 14:13
n0tb0dy
у меня почему то вылетает на строке

list = am.getRunningTasks(10);

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

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

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

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

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

Добавлено: 13 мар 2014, 15:26
adarash
логи?

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

Добавлено: 13 мар 2014, 15:53
n0tb0dy
все уже нашел ошибку спасибо за отзыв :)

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

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

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

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

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

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

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

Добавлено: 13 мар 2014, 16:09
altwin
[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]

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

Добавлено: 13 мар 2014, 16:23
n0tb0dy
на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?

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

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

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

Добавлено: 13 мар 2014, 16:59
n0tb0dy
но мне же нужен не PID и не имя процесса, а TID (Task ID)

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

Добавлено: 13 мар 2014, 17:03
n0tb0dy
подпись у вас на пять баллов! )))) долго смеялся

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

Добавлено: 13 мар 2014, 17:12
n0tb0dy
Хорошо, может просто тогда подскажите как в этот код добавить чтобы еще в логах выводился 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());

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

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

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

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

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

Добавлено: 13 мар 2014, 20:55
n0tb0dy
ну вот мы и вернулись на круги своя :)

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

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 который отображается в дебаг логах.

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

Добавлено: 13 мар 2014, 20:58
n0tb0dy
если сделать так

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

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

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

Добавлено: 14 мар 2014, 12:00
n0tb0dy
и так походу ни кто не в курсе как получить TID в приложении :(

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

Добавлено: 14 апр 2014, 18:39
n0tb0dy
Добрый день!

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

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

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

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

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

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

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

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

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

Добавлено: 15 апр 2014, 14:07
n0tb0dy
и еще может кто подскажет как зная TaskID получить имя корневой активности для данной задачи, а так же количество активностей в ней?