aşağıdaki kullanarak yeni bir etkinlik başlatıyoruz ediyorum: başlatıyorFLAG_ACTIVITY_CLEAR_TASK ayarlandığında siyah ekran nasıl engellenir?
Intent intent = new Intent(this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0, 0);
MyNewActivity
ederken, siyah bir ekran gösterilir.
Intent.FLAG_ACTIVITY_CLEAR_TASK
'u kaldırırsam, etkinlik herhangi bir anda siyah bir ekran gösterilmeden başlatılır (bunun yerine, yeni yük yüklenirken önceki etkinlik gösterilir).
Bu siyah ekrandan kaçınmanın bir yolu var mı? Bayrakların kaldırılması bir seçenek gibi görünmüyor (mevcut görev yığınının tümünü temizlemem ve kök olarak yeni bir etkinlik başlatmam gerekiyor).
DÜZENLEME: Sorunu yeniden üreten çok basit bir kod iliştiriyorum (uygulama için Theme.AppCompat
gibi koyu bir temayı belirleyin). Siyah ekran çok az bir süre gösterilir (alım etkinliğinde başlatma etkinliğinin kaç tane çalıştığına bağlıdır), ancak bunu görebilirsiniz. Eğer FLAG_ACTIVITY_CLEAR_TASK
kullanmazsanız, siyah ekran gösterilen ve geçiş pürüzsüz değildir:
MainActivity
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0,0);
}
});
}
}
MyNewActivity
public class MyNewActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_bright">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CLICK ME!" />
</RelativeLayout>
activity_new.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_light">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I am the new activity!" />
</RelativeLayout>
teşekkürler! Ancak daha iyi bir yaklaşım Activity.onCreate
sırasında ana iş parçacığı üzerinde daha az şeyler yapmak ve gösteri izin vermek
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowDisablePreview">true</item>
...
</style>
:
uygulamanızı Fix()'. Bunun yerine, 'onCreate() 'ile başlattığınız bir arka plan iş parçacığına boşaltma yapın. –
Artık ne yazık ki optimize edemiyorum (uygulamada, ana iş parçacığında arka plan resimlerinin işlenmesini gerektiren çok özel görsel tasarım yönergeleri var). Her neyse, bu ** sorun değil. Hiçbir şey yapmayan bir etkinlikle bile, herhangi bir projede çoğaltmak için örnek kod ekledim. – Ereza
Başka bir seçenek de "CLEAR_TASK" yerine "Intent.FLAG_ACTIVITY_CLEAR_TOP" kullanmaktır. Bu, yalnızca "MyNewActivity" öğesinin orijinal örneğini yığınta bırakırsanız çalışır (yani: diğer Etkinlikler'i başlattığınızda tamamlamayın). Bu hala düzeltmezse, 'Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP'. Bu, diğer tüm etkinlikleri yığından silecek ve mevcut olan "MyNewActivity" örneğine dönecektir. Bu durumda, "MyNewActivity" nin "onNewIntent()" de kontrol edebileceği "Intent" e "extra" ekleyebilir ve ayarlanmışsa kendini yeniden başlatabilirsiniz. –