Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 июл 2017, 15:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 16 дек 2012, 23:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.

В этом уроке:


- меняем поведение Activity в Task




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 25 май 2017, 13:38, всего редактировалось 7 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 дек 2012, 15:02 
Аватар пользователя

Зарегистрирован: 01 апр 2012, 16:09
Сообщений: 117
Откуда: Минск
Благодарил (а): 11 раз.
Поблагодарили: 5 раз.
Супер! Примеры шикарнейшие! Помню как разбирался в документации по этой теме.. в голове жуть что творилось, а тут так на блюдечке преподнесено.. =)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 дек 2012, 15:57 

Зарегистрирован: 31 июл 2012, 10:38
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Замечательная статья. Спасибо


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2013, 08:56 

Зарегистрирован: 13 апр 2012, 08:03
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Если пользователь долгое время не использует свернутый таск, то система его чистит, за исключением корневого Activity.
Почему у меня не чистит его? загружается топАктивити и выполняет код из onCreate(). Жму назад появляется нижнее активити и тоже выполняет onCreate().


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 ноя 2013, 17:36 

Зарегистрирован: 24 июл 2013, 10:32
Сообщений: 5
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Есть активити со сплешскрином. Разумеется хочу убрать его из хистори после демонстрации. Почитал статью и пришел к выводу (не знаю верному или нет), что флаги на активти можно устанавливать в манифесте. Ну и, согласно этой логике, нашел в манифесте пункт "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 KiB | Просмотров: 4332 ]
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 14:13 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
у меня почему то вылетает на строке

list = am.getRunningTasks(10);

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

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

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 15:26 
Аватар пользователя

Зарегистрирован: 17 июл 2013, 09:59
Сообщений: 333
Благодарил (а): 16 раз.
Поблагодарили: 48 раз.
логи?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 15:53 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
все уже нашел ошибку спасибо за отзыв :)

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

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

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

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

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 16:09 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. try
  2. {
  3.     List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
  4.     int numOfTasks = tasks.size();
  5.     for(int i = 0; i < numOfTasks; i++)
  6.     {
  7.         ActivityManager.RunningAppProcessInfo task = tasks.get(i);
  8.         try
  9.         {
  10.             PackageInfo myPInfo = getPackageManager().getPackageInfo(task.processName, 0);
  11.             //Log::task.processName
  12.         }
  13.         catch (PackageManager.NameNotFoundException ne)
  14.         {
  15.          ne.printStackTrace();
  16.         }
  17.     }
  18. }
  19. catch (SecurityException se)
  20. {
  21.  se.printStackTrace();
  22. }

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 16:23 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 16:52 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
n0tb0dy писал(а):
на сколько я понял этот код, то в переменной myPInfo должен оказаться TID текущей активности?

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

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 16:59 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
но мне же нужен не PID и не имя процесса, а TID (Task ID)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 17:03 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
подпись у вас на пять баллов! )))) долго смеялся


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 17:12 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
Хорошо, может просто тогда подскажите как в этот код добавить чтобы еще в логах выводился TID (Task ID), ну и до кучи PID. Хотя это и отображается в колонках дебагера, но сильно нужно мне для понимания сей темы.

Код: [ Загрузить ] [ Скрыть ]
  1. public void onInfoClick(View v) { 
  2.     list = am.getRunningTasks(10); 
  3.     for (RunningTaskInfo task : list) { 
  4.       if (task.baseActivity.flattenToShortString().startsWith("ru.startandroid.develop.p116")){ 
  5.       Log.d(LOG_TAG, "------------------"); 
  6.       Log.d(LOG_TAG, "Count: " + task.numActivities); 
  7.       Log.d(LOG_TAG, "Root: " + task.baseActivity.flattenToShortString()); 
  8.       Log.d(LOG_TAG, "Top: " + task.topActivity.flattenToShortString()); 
  9.       } 
  10.     } 
  11.   } 


То есть надо добавить что-то типа:

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 17:40 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
значит вместо RunningAppProcessInfo, нужно использовать в List RunningTaskInfo и идти по нему итератором вызывая description или id или что там у него еще есть :)

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

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 20:55 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
ну вот мы и вернулись на круги своя :)

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 20:58 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
если сделать так

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 мар 2014, 12:00 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
и так походу ни кто не в курсе как получить TID в приложении :(


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 апр 2014, 18:39 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
Добрый день!

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

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

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

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

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

Привожу скрин логов.

Вложение:
S0043.png
S0043.png [ 70.48 KiB | Просмотров: 3906 ]


Может меня кто-то посвятить в этом вопросе?

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

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. for (RunningTaskInfo task : list) {
  2.                         if (task.baseActivity.flattenToShortString().startsWith(
  3.                                         "com.example.ap0004")) {
  4.  


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 апр 2014, 14:07 
Аватар пользователя

Зарегистрирован: 14 фев 2014, 09:42
Сообщений: 135
Благодарил (а): 25 раз.
Поблагодарили: 1 раз.
и еще может кто подскажет как зная TaskID получить имя корневой активности для данной задачи, а так же количество активностей в ней?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB