Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity
Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity
В этом уроке:
- меняем поведение Activity в Task
Click here to read this article!
- меняем поведение Activity в Task
Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:38, всего редактировалось 7 раз.
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Супер! Примеры шикарнейшие! Помню как разбирался в документации по этой теме.. в голове жуть что творилось, а тут так на блюдечке преподнесено.. =)
-
- Сообщения: 3
- Зарегистрирован: 31 июл 2012, 10:38
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Замечательная статья. Спасибо
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Если пользователь долгое время не использует свернутый таск, то система его чистит, за исключением корневого Activity.
Почему у меня не чистит его? загружается топАктивити и выполняет код из onCreate(). Жму назад появляется нижнее активити и тоже выполняет onCreate().
Почему у меня не чистит его? загружается топАктивити и выполняет код из onCreate(). Жму назад появляется нижнее активити и тоже выполняет onCreate().
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Есть активити со сплешскрином. Разумеется хочу убрать его из хистори после демонстрации. Почитал статью и пришел к выводу (не знаю верному или нет), что флаги на активти можно устанавливать в манифесте. Ну и, согласно этой логике, нашел в манифесте пункт "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-флагов с атрибутами активити в манифесте и адекватно ли заявленному флагу работает ситуация?
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 (24.22 КБ) 17795 просмотров
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
у меня почему то вылетает на строке
list = am.getRunningTasks(10);
дебаг лог указывает на эту строку
разрешение в androidmanifest.xml
<uses-permission android:name="android.permission.GET_TASKS"/>
я прописал, но все равно задача вылетает
list = am.getRunningTasks(10);
дебаг лог указывает на эту строку
разрешение в androidmanifest.xml
<uses-permission android:name="android.permission.GET_TASKS"/>
я прописал, но все равно задача вылетает
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
все уже нашел ошибку спасибо за отзыв
но есть другой вопрос по этой теме
как получить Task ID (TID)
я делаю так MyTID=task.id;
и мне выдается какой то левый двухзначный номер, а хочется получить именно тот TID который отображается в дебаг логах.
это я делаю в теле цикла
list = am.getRunningTasks(10);
for (RunningTaskInfo task : list) {
но есть другой вопрос по этой теме
как получить Task ID (TID)
я делаю так MyTID=task.id;
и мне выдается какой то левый двухзначный номер, а хочется получить именно тот TID который отображается в дебаг логах.
это я делаю в теле цикла
list = am.getRunningTasks(10);
for (RunningTaskInfo task : list) {
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
[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]
{
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
на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
task.processName == содержит имя процесса.n0tb0dy писал(а):на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?
myPInfo - это объект ( http://developer.android.com/intl/ru/re ... eInfo.html ) у которого вызывается метод getPackageInfo(), в который передается имя процесса. Такова java
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
но мне же нужен не PID и не имя процесса, а TID (Task ID)
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
подпись у вас на пять баллов! )))) долго смеялся
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Хорошо, может просто тогда подскажите как в этот код добавить чтобы еще в логах выводился TID (Task ID), ну и до кучи PID. Хотя это и отображается в колонках дебагера, но сильно нужно мне для понимания сей темы.
То есть надо добавить что-то типа:
Log.d(LOG_TAG, "TID: " + task.getTID());
Log.d(LOG_TAG, "PID: " + task.getPID());
то что выделил красным... это просто ради красного словца
Код: Выделить всё
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
значит вместо RunningAppProcessInfo, нужно использовать в List RunningTaskInfo и идти по нему итератором вызывая description или id или что там у него еще есть
P.S. подпись не моя, это копипаст от Мартина Голдинга
P.S. подпись не моя, это копипаст от Мартина Голдинга
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
ну вот мы и вернулись на круги своя
я же с этого и начинал
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 который отображается в дебаг логах.
я же с этого и начинал
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
если сделать так
Log.d(LOG_TAG, "TID: " + task.id);
то выводится двухзначное число а не TID который в дебагере
Log.d(LOG_TAG, "TID: " + task.id);
то выводится двухзначное число а не TID который в дебагере
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
и так походу ни кто не в курсе как получить TID в приложении
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
Добрый день!
Я таки продолжаю мучить тему тасков, активностей и стека.
Написал по мотивам урока 116 два приложения: AP0003 и AP0004
Активность А из приложения AP0004, запускает Активность C из приложения AP0003 с настройками по умолчанию.
Все идет как надо, все запускается. Но мне не понятно почему в отладчике видно что Активности А и C находятся в разных процессах (PID) и в разных тасках (TID)?
Хотя Task.ID вытащенный из кода одинаковый и он имеет двузначное значение в то время как TID в логах имеет четырехзначное значение.
Привожу скрин логов.
Может меня кто-то посвятить в этом вопросе?
инфу о тасках вытаскиваю как в уроке
[syntax=java]
for (RunningTaskInfo task : list) {
if (task.baseActivity.flattenToShortString().startsWith(
"com.example.ap0004")) {
[/syntax]
Я таки продолжаю мучить тему тасков, активностей и стека.
Написал по мотивам урока 116 два приложения: AP0003 и AP0004
Активность А из приложения AP0004, запускает Активность C из приложения AP0003 с настройками по умолчанию.
Все идет как надо, все запускается. Но мне не понятно почему в отладчике видно что Активности А и C находятся в разных процессах (PID) и в разных тасках (TID)?
Хотя Task.ID вытащенный из кода одинаковый и он имеет двузначное значение в то время как TID в логах имеет четырехзначное значение.
Привожу скрин логов.
Может меня кто-то посвятить в этом вопросе?
инфу о тасках вытаскиваю как в уроке
[syntax=java]
for (RunningTaskInfo task : list) {
if (task.baseActivity.flattenToShortString().startsWith(
"com.example.ap0004")) {
[/syntax]
Re: Урок 116. Поведение Activity в Task. Intent-флаги, launc
и еще может кто подскажет как зная TaskID получить имя корневой активности для данной задачи, а так же количество активностей в ней?