Это хорошая практика для перезагрузки Activity
в Android ?
Каков будет лучший способ сделать это? this.finish
а потом this.startActivity
с активностью Intent
?
Это хорошая практика для перезагрузки Activity
в Android ?
Каков будет лучший способ сделать это? this.finish
а потом this.startActivity
с активностью Intent
?
Ответы:
Вы можете просто использовать
finish();
startActivity(getIntent());
чтобы освежить себя Activity
изнутри.
для тех, кто не хочет видеть этот миг после метода refreshate (), просто используйте
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Это то, что я делаю, чтобы перезагрузить действие после изменения, возвращаясь из изменения предпочтений.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Это по существу заставляет деятельность перерисовывать себя.
Обновлено: лучший способ сделать это - вызвать recreate()
метод. Это приведет к воссозданию активности.
Я видел ранее ответы, которые были даны для перезагрузки деятельности с помощью Intent. Они будут работать, но вы также можете сделать то же самое, используя метод refreshate (), указанный в самом классе Activity.
Вместо того, чтобы писать это
// Обновить основное действие после закрытия диалогового окна
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Это можно сделать, написав это только
recreate();
recreate()
было решением для меня - «перезапуск» действия не работал для меня, так как я запустил действие, используя «StartActivityForResult», и это нарушило поведение.
просто используйте
this.recreate();
это вызовет метод onCreate в действии
Мне нужно было в срочном порядке обновить список сообщений в одном из моих приложений, поэтому я просто выполнил обновление своего основного пользовательского интерфейса, прежде чем закрывать диалоговое окно, в котором я находился. Уверен, есть и лучшие способы сделать это.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android включает в себя систему управления процессами, которая управляет созданием и уничтожением действий, что в значительной степени сводит на нет любую выгоду, которую вы могли бы получить от ручного перезапуска действий. Вы можете видеть больше информации об этом в Основах Приложения
Тем не менее, хорошей практикой является обеспечение того, чтобы ваши методы onPause и onStop высвобождали любые ресурсы, которые вам не нужны, чтобы использовать их и использовать onLowMemory, чтобы свести к минимуму ваши потребности в деятельности.
в некоторых случаях это лучшая практика, в других это не очень хорошая идея, это зависит от контекста, если вы решили сделать это, используя следующее - лучший способ перейти от действия к ее сыновьям:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
дело в том, что когда вы заканчиваете () из ActivityIWishToRun, вы возвращаетесь к своему активному действию
Перезагрузка всей вашей деятельности может быть тяжелой задачей. Просто поместите часть кода, которая должна быть обновлена ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Ява:
@Override
public void onResume(){
super.onResume();
//here...
}
И при необходимости вызывайте onResume () .
Я не думаю, что это хорошая идея ... было бы лучше внедрить более чистый метод. Например, если ваша деятельность содержит форму, более чистый метод может просто очистить каждый виджет в форме и удалить все временные данные. Я думаю, это то, что вы хотите: восстановить активность в исходное состояние.
После экспериментов с этим я не обнаружил неожиданных последствий возобновления активности. Кроме того, я считаю, что это очень похоже на то, что 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 все равно создаст новую деятельность, которая, так или иначе, не нужна, даже если он решил проблему «моргания», я думаю.
Слишком поздно для этого вопроса, но если кто-то ищет решение, вот оно.
После входа у меня была такая же проблема, поэтому я использовал
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Я использовал это, и он отлично работает без
finish()
startActivity(getIntent());
для меня это работает, это не создание другого Intents и на тех же Intents новые данные загружаются.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);