Bir yeniden iyi bir uygulama mı Activity
yılında Android ?
Bunu yapmanın en iyi yolu ne olurdu? this.finish
ve sonra this.startActivity
aktivite ile Intent
?
Bir yeniden iyi bir uygulama mı Activity
yılında Android ?
Bunu yapmanın en iyi yolu ne olurdu? this.finish
ve sonra this.startActivity
aktivite ile Intent
?
Yanıtlar:
Basitçe kullanabilirsiniz
finish();
startActivity(getIntent());
Activity
kendi içinden yenilemek için .
createte () yönteminden sonra bu yanıp sönmeyi görmek istemeyenler için
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Bir tercih değişikliği döndükten sonra etkinliği yeniden yüklemek için yaptığım budur.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Bu aslında etkinliğin kendini yeniden çizmesine neden olur.
Güncelleme: Bunu yapmanın daha iyi bir yolu recreate()
yöntemi çağırmaktır . Bu, etkinliğin yeniden oluşturulmasına neden olur.
Niyet kullanarak etkinliği yeniden yüklemek için verilen daha önceki yanıtları gördüm. Bunlar işe yarayacak, ancak aynı zamanda Activity sınıfının kendisinde verilen rekreasyon () yöntemini kullanarak da yapabilirsiniz.
Bunu yazmak yerine
// İletişim kutusunu kapattıktan sonra ana etkinliği yenile
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Bu sadece bunu yazarak yapılabilir
recreate();
recreate()
"StartActivityForResult" kullanarak etkinliğe başladığım ve davranışı bozduğum için "yeniden başlatma" etkinliği benim için çalışmadı.
sadece kullan
this.recreate();
bu, etkinlikte onCreate yöntemini tetikler
Aceleyle uygulamalarımdan birinde bir mesaj listesini güncellemem gerekiyordu, bu yüzden bulunduğum iletişim kutusunu kapatmadan önce ana kullanıcı arayüzü aktivitemi yeniledim. Bunu da başarmanın daha iyi yolları olduğundan eminim.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android, bir etkinliğin manuel olarak yeniden başlatılmasını göreceğiniz herhangi bir yararı büyük ölçüde reddeden etkinliklerin oluşturulmasını ve yok edilmesini yöneten bir süreç yönetim sistemi içerir. Bu konuda daha fazla bilgiyi Application Fundamentals'da bulabilirsiniz.
Bununla birlikte iyi bir uygulama, onPause ve onStop yöntemlerinizin , etkinlik gereksinimlerinizi mutlak minimum düzeye indirmek için tutmanız gerekmeyen ve onLowMemory'de kullanmanız gerekmeyen kaynakları serbest bırakmasını sağlamaktır.
bazı durumlarda en iyi uygulama diğerlerinde iyi bir fikir değildir, eğer bunu yapmayı seçtiyseniz, aşağıdakileri kullanmak bir aktiviteden oğullarına geçmenin en iyi yoludur:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
asıl mesele ne zaman bitirirseniz ()
Tüm etkinliğinizi yeniden yüklemek ağır bir iş olabilir. Kodun yenilenmesi gereken kısmını koymanız yeterlidir ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
Ve gerektiğinde " onResume () " çağırın .
Bunun iyi bir fikir olduğunu sanmıyorum ... daha temiz bir yöntem uygulamak daha iyi olur. Örneğin, etkinliğiniz bir form barındırıyorsa, temizleyici yöntem formdaki her widget'ı temizleyebilir ve tüm geçici verileri silebilir. Sanırım istediğin bu: aktiviteyi başlangıç durumuna geri getir.
Bir süre bunu denedikten sonra bir aktiviteyi yeniden başlatmanın beklenmedik bir sonucunu bulamadım. Ayrıca, yönelim değiştiğinde Android'in varsayılan olarak yaptığı şeye çok benzediğini düşünüyorum, bu yüzden benzer bir durumda yapmamak için bir neden göremiyorum.
aynı problemim var
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
bu kod benim için çalışıyor. Android API 17
Bir etkinlikte etkinliği recreate()
"yeniden oluşturmak" için arayabilirsiniz (API 11+)
Başka bir yaklaşımım daha vardı: launchMode
faaliyetimin singleTop
çağrılmasına ve çağrılmadan ayarlanması finish()
sadece startActivity(getIntent())
işi yapacak. Sadece hem yeni verilerle bakmak zorundasınız onCreate()
ve onNewIntent
. Şuş yolu ile, uygulama AMAN SINGH'in söylediği gibi yanıp sönebilir. Ancak AMAN SINGH'in yaklaşımı, yine de 'göz kırpma' sorununu çözse bile, bir şekilde gereksiz olan yeni bir etkinlik yaratacaktır.
Bu soru için çok geç, ama birisi çözüm arıyorsa, işte burada.
Giriş yaptıktan sonra aynı sorunu yaşadım, bu yüzden kullandım
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Bunu kullandım ve olmadan iyi çalışıyor
finish()
startActivity(getIntent());
benim için çalışıyor başka bir Intents oluşturmuyor ve aynı Intents yeni veri yüklendi.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);