Di Android, saya mendefinisikan aktivitas ExampleActivity.
Ketika aplikasi saya diluncurkan, sebuah instance dari A-Activity ini dibuat, katakanlah A
. Ketika pengguna mengklik tombol A
, instance lain dari B-Activity, B dibuat. Sekarang tumpukan tugasnya adalah BA, dengan B di atas. Kemudian, pengguna mengklik tombol di B, instance C-Activity lain, dan C dibuat. Sekarang tumpukan tugas adalah CBA, dengan C di atas.
Sekarang, ketika pengguna mengklik tombol pada C, saya ingin aplikasi membawa A ke latar depan, yaitu membuat A berada di atas tumpukan tugas, ACB.
Bagaimana saya bisa menulis kode untuk mewujudkannya?
android
android-intent
android-activity
pengguna256239
sumber
sumber
FLAG_ACTIVITY_SINGLE_TOP
tidak akan membantu di sini. Saat ActivityC berada di puncak tumpukan dan memanggilstartActivity()
untuk meluncurkan ActivityA, meskipun Anda menyetelnyaFLAG_ACTIVITY_SINGLE_TOP
masih akan membuat instance baru dari ActivityA.FLAG_ACTIVITY_SINGLE_TOP
hanya mencegah pembuatan instance baru jika Anda mencoba meluncurkan aktivitas yang sudah ada di bagian atas tumpukan . Dalam hal ini, ActivityA tidak berada di bagian atas tumpukan, jadi Android membuat instance baru.(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP)
untuk menghapus riwayat apa pun setelah diberikanActivity
.Cara terbaik yang saya temukan untuk melakukan ini adalah dengan menggunakan maksud yang sama seperti yang digunakan layar beranda Android - Peluncur aplikasi.
Sebagai contoh:
Intent i = new Intent(this, MyMainActivity.class); i.setAction(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(i);
Dengan cara ini, aktivitas apa pun dalam paket saya yang terakhir digunakan oleh pengguna dibawa kembali ke depan lagi. Saya menemukan ini berguna dalam menggunakan PendingIntent layanan saya untuk membuat pengguna kembali ke aplikasi saya.
sumber
Activity
dalam tumpukan tugas. OP dengan jelas menyatakan bahwa dia ingin pindahActivityA
dari bawah tumpukan ke atas tumpukan (yaitu: dia ingin menyusun ulang ActivityA ke depan tumpukan tugas ). Jawaban ini tidak akan berhasil. Jawaban ini adalah jawaban untuk pertanyaan "Bagaimana cara membawa aplikasi saya (tumpukan tugas) dari latar belakang ke latar depan?" Itu adalah pertanyaan yang sama sekali berbeda dari pertanyaan awal OP.Berikut adalah contoh kode bagaimana Anda dapat melakukannya:
Intent intent = getIntent(getApplicationContext(), A.class)
Ini akan memastikan bahwa Anda hanya memiliki satu contoh aktivitas di tumpukan.
private static Intent getIntent(Context context, Class<?> cls) { Intent intent = new Intent(context, cls); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return intent; }
sumber
FLAG_ACTIVITY_REORDER_TO_FRONT : Jika disetel dalam Intent yang diteruskan ke Context.startActivity (), tanda ini akan menyebabkan aktivitas yang diluncurkan dibawa ke depan tumpukan riwayat tugasnya jika sudah berjalan.
Intent i = new Intent(context, AActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i);
sumber
Saya pikir kombinasi
Intent
bendera harus melakukan triknya. Secara khusus,Intent.FLAG_ACTIVITY_CLEAR_TOP
danIntent.FLAG_ACTIVITY_NEW_TASK
.Tambahkan tanda ini ke maksud Anda sebelum memanggil
startActvity
.sumber
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Catatan Mode peluncuran aktivitas rumah Anda harus single_task
sumber
Secara umum menurut saya metode pengelolaan kegiatan ini tidak disarankan. Masalah dengan mengaktifkan kembali aktivitas dua Langkah ke bawah dalam Tumpukan adalah bahwa aktivitas ini kemungkinan besar telah dimatikan. Saran saya untuk mengingat keadaan aktivitas Anda dan meluncurkannya
startActivity ()
Saya yakin Anda telah melihat halaman ini tetapi untuk kenyamanan Anda tautan ini
sumber
Jika Anda ingin membawa aktivitas ke puncak tumpukan saat mengklik Notifikasi, Anda mungkin perlu melakukan hal berikut agar FLAG_ACTIVITY_REORDER_TO_FRONT berfungsi:
Solusi bagi saya untuk ini adalah membuat penerima siaran yang mendengarkan tindakan siaran yang dipicu pemberitahuan. Pada dasarnya:
Notifikasi memicu tindakan siaran dengan tambahan nama aktivitas yang akan diluncurkan.
Penerima siaran menangkap ini saat notifikasi diklik, lalu membuat maksud untuk meluncurkan aktivitas itu menggunakan flag FLAG_ACTIVITY_REORDER_TO_FRONT
Aktivitas dibawa ke puncak tumpukan aktivitas, tidak ada duplikat.
sumber
jika Anda menggunakan "Google Cloud Message" untuk menerima notifikasi push dengan kelas "PendingIntent", kode berikut hanya menampilkan notifikasi di bilah tindakan.
Mengklik notifikasi tidak ada aktivitas yang akan dibuat, aktivitas aktif terakhir dipulihkan dengan mempertahankan status saat ini tanpa masalah.
Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Ciao!
sumber