Хорошо ли перезагружать Activity
в Android?
Каким был бы лучший способ сделать это? this.finish
, а затем this.startActivity
с активностью Intent
?
Хорошо ли перезагружать Activity
в Android?
Каким был бы лучший способ сделать это? this.finish
, а затем this.startActivity
с активностью Intent
?
Вы можете просто использовать
finish();
startActivity(getIntent());
чтобы обновить Activity
изнутри.
для тех, кто не хочет видеть, что метод мигать после метода recreate() просто использует
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Это то, что я делаю, чтобы перезагрузить действие после изменения, возвращаясь из изменения предпочтений.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Это по существу заставляет действие перерисовывать себя.
Обновлено: Лучший способ сделать это - вызвать метод recreate()
. Это приведет к воссозданию активности.
Мне нужно было быстро обновить список сообщений в одном из моих приложений, поэтому я только что обновил свой основной пользовательский интерфейс до того, как закрыл диалоговое окно, в котором я был. Я уверен, что есть лучшие способы выполнить это также.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android включает в себя систему управления процессами, которая обрабатывает создание и уничтожение действий, что в значительной степени отрицает любую выгоду, которую вы увидите при перезапуске вручную. Вы можете увидеть дополнительную информацию об этом в Основы приложений
Хорошая практика заключается в том, чтобы гарантировать, что ваши методы onPause и onStop освободят любые ресурсы, которые вам не нужно удерживать, и используйте onLowMemory, чтобы сократить ваши действия до абсолютного минимума.
Я видел ранее ответы, которые были даны для перезагрузки деятельности с помощью Intent. Они будут работать, но вы также можете сделать то же самое с помощью метода refreshate(), указанного в самом классе Activity.
Вместо того, чтобы писать это
//Обновить основное действие после закрытия диалогового окна
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Это можно сделать, написав это только
recreate();
просто используйте
this.recreate();
это вызовет метод onCreate в действии
Начните с намерения тем же самым activity
и закройте activity
.
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
в некоторых случаях это лучшая практика в других, это нехорошая идея, которую она привнесла в контекст если вы решили сделать это, используя следующее, это лучший способ перейти от деятельности к своим сыновьям:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
вещь - когда вы заканчиваете() из activityIWishToRun, вы возвращаетесь к своей живой деятельности.
Я не думаю, что хорошая идея... было бы лучше реализовать более чистый метод. Например, если ваша активность содержит форму, метод clean может просто очистить каждый виджет в форме и удалить все временные данные. Я предполагаю, что вы хотите: восстановить активность в исходное состояние.
После экспериментов с этим некоторое время я не обнаружил неожиданных последствий перезапуска активности. Кроме того, я считаю, что это очень похоже на то, что Android делает по умолчанию, когда меняется ориентация, поэтому я не вижу причины не делать этого в аналогичных обстоятельствах.
У меня такая же проблема
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
этот код работает для меня. Android api 17
В упражнении вы можете вызвать recreate()
, чтобы "воссоздать" упражнение (API 11+)
У меня был другой подход: установка launchMode
моей активности на singleTop
и без вызова finish()
, просто startActivity(getIntent())
выполнит задание. Просто нужно заботиться о новых данных как в onCreate()
, так и onNewIntent
. С помощью метода Sush приложение может мигать, как сказал AMAN SINGH. Но подход AMAN SINGH по-прежнему будет создавать новую деятельность, которая как-то не нужна, даже если он исправил проблему "мигания", я думаю.
Слишком поздно для этого вопроса, но если кто-то ищет решение, вот оно.
Перезагрузка всей вашей деятельности может быть тяжелой задачей. Просто вставьте ту часть кода, которую необходимо обновить (kotlin):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
И вызывайте "onResume()" всякий раз, когда это необходимо.