android:clearTaskOnLaunch tidak berfungsi Bagaimana cara menghapus backstack saat berada di latar depan?

Saya memerlukan perilaku ini di aplikasi saya, "pengguna harus masuk setiap kali dia mencoba meluncurkannya (menyentuh ikon aplikasi secara langsung, atau melalui pengelola tugas atau melalui aplikasi terbaru)" Jadi aktivitasnya ada dalam urutan ini (pikirkan Aplikasi nama adalah aplikasi Foo)

  1. S - Layar Pembuka
  2. L - Layar Pemuatan
  3. Lo - Layar Masuk
  4. M - Menu Utama (Memiliki daftar tugas)
  5. T - Layar Tugas

"Pengguna memulai aplikasi dan melanjutkan seperti dalam urutan berikut: S -> L -> Lo (masuk) -> M (pilih salah satu Tugas) -> Layar Tugas

  • jadi saat dia berada di Layar Tugas, dia menekan tombol Beranda dan Aplikasi berjalan ke latar belakang dan dia menggunakan aplikasi lain. dan menjalankan aplikasi Foo lagi. Jadi jika dia menekan tombol Kembali, itu menunjukkan Layar Tugas yang digunakan sebelumnya??? dan jika tombol Kembali ditekan lagi, ia akan kembali ke Layar utama, dan seterusnya...???

  • Ini seharusnya tidak terjadi, yang saya inginkan adalah, ketika Aplikasi muncul di latar depan, pengguna harus masuk dan tidak pernah bisa kembali ke layar mana pun.

Catatan : semua layar telah memperluas kelas BaseActivity yang telah memperluas kelas Aktivitas. dan di sana saya telah menggunakan metode onResume(),onPause() dan metode khusus lainnya untuk mengetahui kapan kelas anak yang diperluas akan dijeda, dan dilanjutkan ketika aplikasi muncul dari latar belakang!!! Dan di beberapa Layar saya harus menggunakan Fragmen juga...!

Terima kasih sebelumnya atas waktu dan bantuan Anda!


person Randika Vishman    schedule 14.06.2013    source sumber
comment
Diturunkan karena duplikat di sini (jawaban yang sangat bagus, btw), dan di sini   -  person verybadalloc    schedule 14.06.2013
comment
Jika pengguna menekan Beranda atau aktivitas lain muncul di atas (dialer masuk), maka ketika pengguna kembali ke aktivitas Anda (berdasarkan ikon aplikasi atau sebaliknya) maka DIA HARUS DIHARAPKAN melihat aplikasi Anda di tempatnya semula. Saya belum pernah melihat aplikasi Android SERIUS dan POPULER berperilaku berbeda ... Saya tidak melihat alasan mengapa aplikasi tersebut tidak berperilaku seperti itu   -  person gunar    schedule 14.06.2013
comment
Terima kasih atas kedua komentar pada awalnya. @verybadalloc Hai, saya juga sudah menjawab itu sebelum saya memposting ini, tetapi hal-hal itu telah saya terapkan di aplikasi saya, tetapi tidak memberikan hasil yang diinginkan! :(   -  person Randika Vishman    schedule 15.06.2013
comment
@gunar Hai Gunar, jika Anda bisa membayangkan tentang suatu Aplikasi, yang mana Anda dapat menyembunyikan atau mengunci semua gambar yang Anda pilih melalui Aplikasi, dan kapan pun Anda perlu mengakses gambar-gambar itu, Anda harus masuk melalui Aplikasi , namun tidak secara langsung dalam galeri Foto yang terakhir dilihat pada Aplikasi tersebut. jadi untuk menerapkan perilaku seperti itu kita memerlukan skenario yang disebutkan di atas untuk diterapkan   -  person Randika Vishman    schedule 15.06.2013
comment
Saat Aktivitas backStack adalah sebagai berikut A -› B -› C -› D Dan saat pengguna di D, dia menekan tombol Beranda, Dalam cara apa pun dia meluncurkan aplikasi lagi nanti, saya ingin dia kembali ke aktivitas A, seperti memunculkan kembali Stack hingga A!Karena ini adalah Aktivitas Masuk, saya masih belum bisa melakukan pendekatan ini! Saya dapat mengetahuinya di mana saja di Aplikasi, bahwa ketika itu kembali dari Latar Belakang ke Latar Depan, dan Meneruskan metode Intent ke StartActivity dengan FLAG_ACTIVITY_CLEAR_TASK dan saya sudah menggunakan **android:clearTaskOnLaunch=true **, Tapi tetap saja masalahnya ada di sana!   -  person Randika Vishman    schedule 17.06.2013


Jawaban (2)


Tambahkan tag android:clearTaskOnLaunch="true" ke tag aktivitas root (utama) di manifes. Kemudian pengguna akan selalu kembali ke aktivitas ini.

Untuk melompat ke Login dari aktivitas lainnya, gunakan:

public static void logoff(Context c){
    Intent logoff = new Intent(c,LoginActivity.class);
    logoff.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    c.startActivity(logoff);
}
person S.D.    schedule 14.06.2013
comment
Hai, Terima kasih atas balasannya, saya kira saya telah melakukan hal yang sama, tetapi sebenarnya tidak berhasil! Lagi pula, apa alasan membuat metode Statis? Dan kapan harus menelepon ini? Pertanyaan saya sebenarnya saya juga melakukan hal yang sama, dan berhasil memulai Aktivitas Login baru atau bisa masuk ke Splash Screen, namun masalahnya adalah jika Pengguna menekan tombol Kembali, dia masih dapat mengakses Aktivitas sebelumnya di backstack, yang dia gunakan terakhir kali dia menggunakannya! :( (Perilaku ini diperlukan, untuk menghindari memberikan perlindungan terhadap informasi dalam aplikasi) Ada bantuan? - person Randika Vishman; 15.06.2013
comment
@Vishman Metode logoff akan melakukan apa yang dikatakannya, ini akan membawa pengguna kembali ke aktivitas masuk dari aktivitas lainnya. Dan pengguna tidak dapat membatalkannya dengan menekan kembali, karena ini akan mengakhiri tugas lama dan memulai tugas baru. Ini bersifat statis sehingga dapat dengan mudah dipanggil dari mana saja. Sekarang, menambahkan android:clearTaskOnLaunch="true" ke aktivitas Login di manifes akan memastikan bahwa ketika pengguna pergi ke suatu tempat dan kembali ke aplikasi, dia datang ke aktivitas login dan dalam tugas baru yang disegarkan. (seperti metode logoff) Selain itu, saya sarankan menggunakan Fragmen dan menempatkan splash/ memuat/fragmen login hanya dalam Aktivitas Login. - person S.D.; 16.06.2013
comment
hai, terima kasih atas penjelasannya, saya akan mencobanya dan memberi tahu Anda hasilnya, oke? - person Randika Vishman; 17.06.2013
comment
Saat Aktivitas backStack adalah sebagai berikut A -› B -› C -› D Dan saat pengguna di D, dia menekan tombol Beranda, Dalam cara apa pun dia meluncurkan aplikasi lagi nanti, saya ingin dia kembali ke aktivitas A, seperti memunculkan kembali Stack hingga A!Karena ini adalah Aktivitas Masuk, saya masih belum bisa melakukan pendekatan ini! Saya dapat mengetahuinya di mana saja di Aplikasi, bahwa ketika itu kembali dari Latar Belakang ke Latar Depan, dan Meneruskan metode Intent ke StartActivity dengan FLAG_ACTIVITY_CLEAR_TASK dan saya sudah menggunakan **android:clearTaskOnLaunch=true **, Tapi tetap saja masalahnya ada di sana! - person Randika Vishman; 17.06.2013
comment
Saya minta maaf teman-teman, tetapi agak konyol untuk mengatakannya, namun saya menemukan solusi setengah jalan untuk pertanyaan saya dengan mendapatkan bantuan dari jawaban berikut Semoga ini bermanfaat bagi Anda semua jika Anda menemui pertanyaan yang sama. - person Randika Vishman; 12.07.2013

Saya tidak akan berdebat mengapa pertanyaan Anda menggambarkan pengalaman pengguna yang tidak begitu menyenangkan, tapi apa yang akan Anda katakan tentang solusi di bawah ini?

Gantikan Lo, M dan T sebagai fragmen. Jadi setelah L Anda akan memiliki aktivitas (PostL) di mana Anda menampilkan fragmen Lo pertama, lalu pada tindakan pengguna yang akan Anda tambahkan di atas Lo fragmen M dengan get(Supported)FragmentManager.beginTransation().add(id, fragment).commit(), lalu selanjutnya Anda akan mengganti M dengan T: get(Supported)FragmentManager.beginTransation().replace(id, fragment).commit(). - atau Anda dapat menambahkan T di atas M, itu pilihan Anda karena mungkin lebih cocok.

Dalam aktivitas PostL ini, dalam metode onPause() Anda hanya akan memanggil get(Supported)FragmentManager.popBackStack() jika backstack fragmen terdiri dari lebih dari satu fragmen - fragmen terbawah adalah Lo.

Cara ini akan tercakup dalam kedua kasus ketika pengguna mengetuk layar Utama dan masuk kembali ke aplikasi (dari mana pun), atau aplikasi lain apa pun berjalan di latar depan. Selain itu, jika Anda mempertimbangkan dengan benar ukuran backstack, jika pengguna mengetuk kembali maka dia akan selalu membuka fragmen terakhir (bisa jadi M atau Lo).

Saya harap itu masuk akal...

person gunar    schedule 16.06.2013
comment
Baiklah, Terima kasih atas saran Anda terlebih dahulu. Tapi ini tampak seperti cabang perubahan pengembangan yang benar-benar baru, yang saat ini saya miliki sebagian besar produk jadinya. Bagaimanapun, Terima kasih, dan jika saya tidak dapat menyelesaikan masalah ini dengan cara lain, saya akan mencoba solusi ini juga, dan tentunya saya akan memberi tahu Anda apa yang terjadi, oke? :) terima kasih sekali lagi! - person Randika Vishman; 17.06.2013
comment
Anda tidak perlu melakukan pekerjaan itu karena relatif mudah untuk memigrasikan Activity ke Fragment dan sebaliknya. Siklus hidupnya sangat mirip, panggilan baliknya serupa, jadi Anda tidak perlu terlalu banyak bekerja. Anda dapat mengalokasikan katakanlah 2 jam untuk ini, jika berhasil, oke, jika tidak, Anda dapat membiarkannya apa adanya. - person gunar; 17.06.2013
comment
Terima kasih untuk bantuannya! Jadi jika saya menggunakan solusi ini, saya harus memigrasikan semua Tugas lainnya dari Aktivitas ke berbasis Fragmen, bukan? Jika tidak lagi, akan menimbulkan masalah di kemudian hari. - person Randika Vishman; 17.06.2013
comment
Saya minta maaf teman-teman, tetapi agak konyol untuk mengatakannya, namun saya menemukan solusi setengah jalan untuk pertanyaan saya dengan mendapatkan bantuan dari jawaban berikut Semoga ini bermanfaat bagi Anda semua jika Anda menemui pertanyaan yang sama. - person Randika Vishman; 12.07.2013
comment
Lihatlah komentar Radu dari jawaban itu. Itu cara yang licik untuk tidak melakukan apa pun. - person gunar; 12.07.2013
comment
Memang benar jika kita melihatnya secara sekilas. Namun berdasarkan jawaban itu saya menggunakan metode khusus untuk mendeteksi kapan itu datang dari Latar Belakang, dan juga jawaban yang saya berikan tautannya, saya hanya menyelesaikan separuh masalah. Saat pengguna mengklik Ikon Aplikasi dan aplikasi dibawa ke latar depan, secara mengejutkan backstack telah dibersihkan. Namun jika pengguna mengaksesnya dalam aplikasi Terbaru, masalah yang sama masih terjadi, yaitu pengguna dapat mengakses Aktivitas sebelumnya. :( Aku bahkan tidak ingin mengingat sakit kepala itu!!! - person Randika Vishman; 12.07.2013