Как запустить копию одной и той же Activity в новом потоке?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Как запустить копию одной и той же Activity в новом потоке?

Сообщение grem17 » 27 ноя 2014, 16:15

при условии что класс, из которого производится вызов расширяется от BroadcastReceiver, а не Activity

пробовал вот такой вариант - не работает

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

   	          mIntent = new Intent(context, SmsWindow.class);
	           mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	           mIntent.putExtra("NomerSMS", NomerSMS);
	           mIntent.putExtra("BodySMS", BodySMS);
        	   
               new Thread() {
                   @Override
                   public void run() {
                       context.startActivity(mIntent);
                   }
               }.start();
хорошо работает лишь такой, тестовый вариант, как понимаю Intent.ACTION_MAIN - создает основной потом, Intent.ACTION_DEFAULT - дочерний...
как сделать проверку, если запущено с параметром ACTION_MAIN - то следующий запуск сделать с параметром ACTION_DEFAULT?

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

 		   mIntent = new Intent(Intent.ACTION_MAIN, null, context, SmsWindow.class);
	           mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	           mIntent.putExtra("NomerSMS", NomerSMS);
	           mIntent.putExtra("BodySMS", BodySMS);
	           mIntent.putExtra("TimeSMSsent", TimeSMSsent);
	           mIntent.putExtra("TimeNow", TimeNow);
	           mIntent.putExtra("ServCentr", ServCentr);
        	   context.startActivity(mIntent);  

 		   mIntent2 = new Intent(Intent.ACTION_DEFAULT, null, context, SmsWindow.class);
	           mIntent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	           mIntent2.putExtra("NomerSMS", NomerSMS);
	           mIntent2.putExtra("BodySMS", BodySMS);
	           mIntent2.putExtra("TimeSMSsent", TimeSMSsent);
	           mIntent2.putExtra("TimeNow", TimeNow);
	           mIntent2.putExtra("ServCentr", ServCentr);
        	   context.startActivity(mIntent2);  

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Как запустить копию одной и той же Activity в новом пото

Сообщение elron » 03 дек 2014, 01:43

При запуске нового активити(самой себя), в старом выполняется метод onStop() и действия приостанавливаются, а новый выполняется в главном потоке(или другими словами главный поток переходит на новое активити), так что слова "в новом потоке" не совсем корректны. Если активити от другого приложения, то это будет новый процесс, но поток всё равно будет главным.

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как запустить копию одной и той же Activity в новом пото

Сообщение grem17 » 08 дек 2014, 09:23

решение проблемы красивым способом не нашел, сделал через кастыли
создал конф. файл в котором через флаги идет проверка какая именно копия активити в данный момент запущена:
- если первый запуск то
mIntent = new Intent(intent.ACTION_MAIN, null, context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

- если первая копия существует то вторая запускается с таким параметром
mIntent = new Intent(intent.ACTION_DEFAULT, null, context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

незнаю насколько это коряво, но другого выхода найти не смог

Ответить