Отправка активности на задний план без завершения - PullRequest
15 голосов
/ 11 января 2010

Как я могу заставить действие перейти в фоновый режим, не вызывая его метод finish(), и вернуться к родительскому действию, с которого это началось? Я так старался, но я не мог найти решение. Так что, если вы, ребята, могли бы помочь, я был бы очень благодарен.

Ответы [ 5 ]

39 голосов
/ 16 августа 2011

Следующее будет работать, если действие выполняется в другой задаче, отличной от его родителя. Для этого см. http://developer.android.com/guide/topics/manifest/activity-element.html#lmode.

public void onBackPressed () {
    moveTaskToBack (true);
}

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

2 голосов
/ 28 апреля 2010

Если у вас есть данные, которые вы хотите кэшировать / хранить / обрабатывать в фоновом режиме, вы можете использовать AsyncTask или Thread .

Когда вы будете готовы кешировать / перейти к родительскому элементу, вы должны сделать что-то вроде следующего в одном из ваших дочерних методов Activity (при условии, что вы начали дочерний с startActivityForResult ())

Подход потока:

Thread t1 = new Thread(new Runnable() {

        @Override
        public void run() {
            // PUT YOUR CACHING CODE HERE

        }
});

t1.start();

setResult( whatever );
finish();

Вы также можете использовать обработчик , если вам нужно сообщить что-либо из вашей новой темы.

Подход AsyncTask:

new CacheDataTask().execute( data params );
set_result( whatever );
finish();

AsyncTask предназначен для ситуаций, когда вам нужно обработать что-либо в новом потоке, но иметь возможность связаться с процессом пользовательского интерфейса.

0 голосов
/ 27 июля 2017

Просто

защищенный void minimalApp () { Intent startMain = new Intent (Intent.ACTION_MAIN); startMain.addCategory (Intent.CATEGORY_HOME); startMain.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (startMain); }

0 голосов
/ 19 февраля 2012

Перемещение задачи назад НЕ гарантирует, что вы будете поддерживать какое-либо состояние, если только вы не сделаете это вручную, реагируя на события жизненного цикла Activity.

Вы должны просто запустить второй Activity через Intent, используя startActivity(), или, если вам нужно получить результат обратно со второго Activity, использовать startActivityForResult(). Это позволяет вам получить обратный вызов, когда пользователь заканчивает Activity и возвращается к вашему первому Activity.

Запуск Activity и получение результатов: http://developer.android.com/reference/android/app/Activity.html#StartingActivities

0 голосов
/ 11 января 2010

Попробуйте:

 Intent toNextActivity = new Intent(CurrentActivity.this,
                                     NextActivity.class);
 CurrentActivity.startActivity(toNextActivity);

Если вы используете этот способ, будет вызываться метод onPause () из CurrentActivity, и если у вас есть статическая переменная (например, объект MediaPlayer) в CurrentActivity, он будет продолжать существовать (или воспроизводиться, если воспроизводится) .. 1004 *

Я использую это в своем приложении, но я нашел лучший способ сделать это с помощью сервисов.

Надеюсь, это поможет вам!

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