2013-12-13 2 views
1

Я недавно начал работать с Android. Поэтому я на начальных этапах обучения.Android действительно вызывает вызовы startActivity()?

Вопрос: когда мы вызываем startActivty (Intent) в середине выполнения другого действия. Я действительно думал, что startActivity() просто перепрыгнет в вызываемую деятельность. Разве это не так? просто ли он убирает вызов активности? Я получаю это сомнение bcoz .. У меня есть программа, в которой Activity A имеет цикл. Некоторые, где в середине цикла действует операция B. Я хочу, чтобы активность A возобновлялась с циклом только тогда, когда заканчивается действие B. Я сделал вызов в петлевой как это:

in = new Intent(this,MyChoiceActivity.class); 
in.putExtra("McObj", mc); 
startActivity(in); 
finish(); 

Так что же происходит активность А вызывает В, но В не вошел, А просто возобновляет цикл и снова вызывает Б, просто звонки в B уложены и как только цикл в A завершается, по одному вызову B в стеке выполняются, так что, наконец, первый вызов B выполняется последним (последний в первом случае) ... Но я не хочу, чтобы порядок менялся ... Если A вызывает B, он должен просто перейти и выполнить B, а затем только перейти к циклу ... что я должен сделать, чтобы выполнить это?

+1

читайте это. Вы узнаете о жизненном цикле активности http://developer.android.com/reference/android/app/Activity.html –

+0

добавить к предыдущему комментарию, finish(); используется, когда вы хотите перейти к следующему действию и уничтожить текущий. Если вы перейдете в «Активность B» и выполните финиш по завершению операции «А», вы не сможете вернуться в «Активность А» из Activity B, нажав кнопку «Назад». – Sharj

+0

@ Sharj..I знаю, что..Я действительно пытаюсь передать вопросы от активности A до Activity B..Это действительно делается в цикле. С каждой итерацией вопрос передается на следующий объект .mc там, содержит вопрос ... изначально я реализовал это, не используя финиш. Даже тогда произошло то же самое. Сложности B слагаются. Что делать, чтобы избежать укладки вызовов? Есть идеи? – user2784307

ответ

0

Ваша деятельность может быть занята и просто «быть там». Если вы начнете новую деятельность, пока ваша деятельность действительно что-то делает, она не будет «ждать», пока другая деятельность не будет завершена: оба могут быть в одно и то же время. Если это будет, то это приведет к тому, что у вас будет много оживленных процессов, так что, к счастью, это не то, что происходит.

См activity lifecycle, чтобы узнать больше о том, что деятельность является (это не только один класс, как вы используете это сейчас, это начинается отдельная вещь, которая торчит рядом (а не вместо/на вершине) ваша текущая деятельность).

Вместо этого, эти вещи идут довольно асинхронно, вы можете использовать другой подход: используйте ActivityForResult и начните новый, когда получите этот результат.

+0

Так что если я использую startActivityForResult(), могу ли я избежать укладки вызовов в B? – user2784307

+0

Нет, вы ** не ** переходите к «ожиданному ожиданию» в нити ui в Android. –

+0

@ChrisStratton вы правы, я пытался сказать (но не очень хорошо работать), что это будет так, если он будет работать, как OP ожидает его работы. То, что я пытался сделать, это то, что вы этого не понимаете, и поэтому это работает по-другому :) .. Лемм посмотрим, смогу ли я это исправить. – Nanne

Смежные вопросы