Отправка операции на фоновый режим без завершения
Как я могу сделать операцию переходить в фоновый режим, не вызывая метод finish()
и возвращаясь к активности родителя, которая начала это? Я так много пробовал, но не нашел решения. Поэтому, если вы, ребята, могли бы помочь, я был бы очень благодарен.
Ответы
Ответ 1
Следующие действия будут работать, если действие выполняется в другой задаче с его родителем. Для этого см. http://developer.android.com/guide/topics/manifest/activity-element.html#lmode.
public void onBackPressed () {
moveTaskToBack (true);
}
Текущая задача будет скрыта, но ее состояние останется нетронутым, и когда он будет реактивирован, он появится так же, как и когда вы его оставили.
Ответ 2
Если у вас есть данные, которые вы хотите кэшировать/хранить/обрабатывать в фоновом режиме, вы можете использовать AsyncTask или Thread.
Когда вы будете готовы кэшировать/перейти к родительскому, вы будете делать что-то вроде следующего в одном из ваших методов активности с дочерними элементами (при условии, что вы начали дочерний процесс с помощью startActivityForResult())
Тематический подход:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// PUT YOUR CACHING CODE HERE
}
});
t1.start();
setResult( whatever );
finish();
Вы также можете использовать Handler, если вам нужно сообщить что-либо из вашего нового потока.
Подход AsyncTask:
new CacheDataTask().execute( data params );
set_result( whatever );
finish();
AsyncTask предназначен для ситуаций, в которых вам нужно что-то обрабатывать в новом потоке, но иметь возможность обмениваться данными с процессом пользовательского интерфейса.
Ответ 3
Попробуйте:
Intent toNextActivity = new Intent(CurrentActivity.this,
NextActivity.class);
CurrentActivity.startActivity(toNextActivity);
Если вы используете этот способ, вызывается метод onPause() из CurrentActivity и если у вас есть статическая переменная (например, объект MediaPlayer) в CurrentActivity, она будет продолжать существовать (или играть, если она воспроизводится).
Я использую это в своем приложении, но я нашел лучший способ сделать это с помощью служб.
Надеюсь, это поможет вам!
Ответ 4
Перемещение задачи назад не гарантирует, что вы будете поддерживать любое состояние, если только вы не сделаете это вручную, ответив на события Activity
жизненного цикла.
Вы должны просто запустить второй Activity
через Intent
с помощью startActivity()
, или, если вам нужно получить результат от второго Activity
, используйте startActivityForResult()
. Это позволяет получить обратный вызов, когда пользователь завершит Activity
и вернется к первому Activity
.
Запуск Activity
и получение результатов: http://developer.android.com/reference/android/app/Activity.html#StartingActivities
Ответ 5
Просто
protected void minimApp() { Intent startMain = new Intent (Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (startMain); }