Saya menemukan bug dalam aplikasi saya saat diluncurkan menggunakan tombol "Buka" di aplikasi Google Play Store (sebelumnya disebut Android Market). Tampaknya meluncurkannya dari Play Store menggunakan cara yang berbeda Intent
dari meluncurkannya dari menu ikon aplikasi ponsel. Hal ini menyebabkan beberapa salinan dari Aktivitas yang sama sedang diluncurkan, yang saling bertentangan.
Misalnya, jika aplikasi saya terdiri dari Aktivitas ABC, masalah ini dapat menyebabkan tumpukan ABCA.
Saya mencoba menggunakan android:launchMode="singleTask"
semua Aktivitas untuk memperbaiki masalah ini, tetapi memiliki efek samping yang tidak diinginkan untuk membersihkan tumpukan Aktivitas ke root, setiap kali saya menekan tombol HOME.
Perilaku yang diharapkan adalah: ABC -> HOME -> Dan ketika aplikasi dipulihkan, saya membutuhkan: ABC -> HOME -> ABC
Adakah cara yang baik untuk mencegah peluncuran beberapa Aktivitas dengan tipe yang sama, tanpa menyetel ulang ke aktivitas root saat menggunakan tombol HOME?
sumber
Jawaban:
Tambahkan ini ke onCreate dan Anda harus melakukannya dengan baik:
sumber
finish()
maka pengguna akan melihat aktivitas yang ada di bawahnya. Karena itu, Anda dapat dengan aman berasumsi bahwa instance aplikasi yang sudah ada akan dibawa ke latar depan. Jika bukan itu masalahnya, Anda akan memiliki beberapa instance aplikasi dalam tugas terpisah dan aktivitas yang sedang dibuat akan menjadi root tugasnya.Saya hanya akan menjelaskan mengapa gagal, dan bagaimana mereproduksi bug ini secara terprogram sehingga Anda dapat memasukkan ini ke dalam rangkaian pengujian Anda:
Saat Anda meluncurkan aplikasi melalui Eclipse atau Market App, aplikasi diluncurkan dengan tanda maksud: FLAG_ACTIVITY_NEW_TASK.
Saat diluncurkan melalui peluncur (beranda), ini menggunakan bendera: FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_BROUGHT_TO_FRONT | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, dan menggunakan tindakan " MAIN " dan kategori " LAUNCHER ".
Jika Anda ingin mereproduksi ini dalam kasus uji, gunakan langkah-langkah berikut:
Kemudian lakukan apa pun yang diperlukan untuk memulai aktivitas lainnya. Untuk tujuan saya, saya hanya menempatkan tombol yang memulai aktivitas lain. Kemudian, kembali ke peluncur (rumah) dengan:
Dan simulasikan peluncurannya melalui peluncur dengan ini:
Jika Anda belum memasukkan solusi isTaskRoot (), ini akan mereproduksi masalah. Kami menggunakan ini dalam pengujian otomatis kami untuk memastikan bug ini tidak pernah terjadi lagi.
Semoga ini membantu!
sumber
Sudahkah Anda mencoba mode peluncuran singleTop ?
Berikut beberapa deskripsi dari http://developer.android.com/guide/topics/manifest/activity-element.html :
sumber
Mungkinkah masalah ini ? Atau bentuk lain dari bug yang sama?
sumber
Saya pikir jawaban yang diterima ( Duane Homick ) memiliki kasus yang tidak tertangani:
Anda memiliki tambahan yang berbeda (dan aplikasi duplikat sebagai hasilnya):
Berikut adalah solusi (SDK_INT> = 11 untuk notifikasi) yang saya percaya menangani kasus ini dan notifikasi statusbar juga.
Manifes :
Aktivitas peluncur :
Layanan :
Notifikasi :
sumber
Saya menyadari bahwa pertanyaan tersebut tidak ada hubungannya dengan Xamarin Android tetapi saya ingin memposting sesuatu karena saya tidak melihatnya di tempat lain.
Untuk memperbaiki ini di Xamarin Android saya menggunakan kode dari @DuaneHomick dan ditambahkan ke
MainActivity.OnCreate()
. Perbedaan dengan Xamarin adalah bahwa harus mengejarXamarin.Forms.Forms.Init(this, bundle);
danLoadApplication(new App());
. Jadi sayaOnCreate()
akan terlihat seperti:* Edit: Sejak Android 6.0, solusi di atas tidak cukup untuk situasi tertentu. Saya sekarang juga telah mengatur
LaunchMode
keSingleTask
, yang tampaknya telah membuat semuanya bekerja dengan benar sekali lagi. Tidak yakin apa efeknya pada hal-hal lain meskipun sayangnya.sumber
Saya memiliki masalah yang sama, dan saya memperbaikinya menggunakan solusi berikut.
Dalam aktivitas utama Anda, tambahkan kode ini di atas
onCreate
metode:jangan lupa untuk menambahkan izin ini di manifes Anda.
semoga membantu Anda.
sumber
Saya juga mengalami masalah ini
android:configChanges="mcc|mnc"
- jika Anda memiliki koneksi ke seluler, lihat http://developer.android.com/guide/topics/manifest/activity-element.html#config untuk konfigurasi apa yang ada saat mem-boot sistem atau mendorong buka atau apa pun.sumber
Coba solusi ini:
Buat
Application
kelas dan tentukan di sana:Kemudian di Aktivitas (Peluncur) pertama Anda
onCreate
sebelumsetContentView(...)
tambahkan ini:PS
Controller
adalah kelaskuApplication
.sumber
IS_APP_RUNNING
akan menjaditrue
dan aplikasi Anda akan segera ditutup . Bukan sesuatu yang akan dianggap lucu oleh pengguna.coba gunakan mode peluncuran SingleInstance dengan afinitas yang disetel ke allowtaskreparenting. Ini akan selalu membuat aktivitas dalam tugas baru, tetapi juga mengizinkan reparentingnya. Centang dis: Atribut afinitas
sumber
Saya menemukan cara untuk mencegah memulai aktivitas yang sama, ini bekerja dengan baik untuk saya
sumber