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

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

Добавлено: 27 ноя 2014, 16:15
grem17
при условии что класс, из которого производится вызов расширяется от 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);  

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

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

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

Добавлено: 08 дек 2014, 09:23
grem17
решение проблемы красивым способом не нашел, сделал через кастыли
создал конф. файл в котором через флаги идет проверка какая именно копия активити в данный момент запущена:
- если первый запуск то
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);

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