Ini pada akhirnya akan sampai ke pertanyaan Anda, tetapi saya pertama-tama ingin membahas sejumlah masalah yang Anda ajukan dalam berbagai komentar Anda untuk berbagai jawaban yang sudah diberikan pada saat penulisan ini. Saya tidak punya niat mengubah pikiran Anda - melainkan, ini ada di sini untuk orang lain yang datang untuk membaca posting ini di masa depan.
Intinya adalah saya tidak bisa mengizinkan Android menentukan kapan aplikasi saya akan dihentikan. itu harus menjadi pilihan pengguna.
Jutaan orang sangat senang dengan model di mana lingkungan menutup aplikasi sesuai kebutuhan. Para pengguna itu tidak berpikir tentang "menghentikan" aplikasi Android, lebih dari yang mereka pikirkan tentang "mengakhiri" halaman Web atau "mengakhiri" termostat.
Pengguna iPhone memiliki cara yang sama, yaitu menekan tombol iPhone tidak selalu "terasa" seperti aplikasi dihentikan, karena banyak aplikasi iPhone mengambil di mana pengguna tinggalkan, bahkan jika aplikasi benar-benar ditutup (karena iPhone hanya memungkinkan satu aplikasi pihak ketiga pada suatu waktu, saat ini).
Seperti yang saya katakan di atas, ada banyak hal yang terjadi di aplikasi saya (data sedang PUSHed ke perangkat, daftar dengan tugas yang selalu ada di sana, dll.).
Saya tidak tahu apa artinya "daftar tugas yang selalu ada di sana", tetapi "data yang di-PUSHed ke perangkat" adalah fiksi yang menyenangkan dan tidak boleh dilakukan dengan aktivitas dalam kasus apa pun. Gunakan tugas yang dijadwalkan (via AlarmManager
) untuk memperbarui data Anda untuk keandalan maksimum.
Pengguna kami masuk dan tidak bisa melakukan itu setiap kali mereka mendapat panggilan telepon dan Android memutuskan untuk mematikan aplikasi.
Ada banyak aplikasi iPhone dan Android yang berurusan dengan ini. Biasanya, itu karena mereka memegang kredensial masuk, alih-alih memaksa pengguna untuk masuk setiap kali secara manual.
Misalnya, kami ingin memeriksa pembaruan saat keluar dari aplikasi
Itu adalah kesalahan pada sistem operasi apa pun. Sejauh yang Anda tahu, alasan aplikasi Anda "keluar" adalah karena OS dimatikan, dan kemudian proses pembaruan Anda akan gagal di tengah-aliran. Secara umum, itu bukan hal yang baik. Baik memeriksa pembaruan saat memulai atau memeriksa pembaruan sama sekali tidak sinkron (misalnya, melalui tugas yang dijadwalkan), tidak pernah keluar.
Beberapa komentar menyarankan bahwa menekan tombol kembali sama sekali tidak mematikan aplikasi (lihat tautan di pertanyaan saya di atas).
Menekan tombol KEMBALI tidak "membunuh aplikasi". Ini menyelesaikan aktivitas yang ada di layar ketika pengguna menekan tombol BACK.
Seharusnya hanya berhenti ketika pengguna ingin menghentikannya - tidak pernah dengan cara lain. Jika Anda tidak dapat menulis aplikasi yang berperilaku seperti itu di Android, maka saya pikir Android tidak dapat digunakan untuk menulis aplikasi nyata = (
Maka aplikasi Web juga tidak. Atau WebOS , jika saya memahami model mereka dengan benar (belum memiliki kesempatan untuk bermain dengan salah satunya). Dalam semua itu, pengguna tidak "mengakhiri" apa pun - mereka pergi begitu saja. iPhone sedikit berbeda, karena saat ini hanya memungkinkan satu hal berjalan pada satu waktu (dengan beberapa pengecualian), sehingga tindakan meninggalkan menyiratkan penghentian aplikasi yang cukup cepat.
Apakah ada cara bagi saya untuk benar-benar keluar dari aplikasi?
Seperti yang dikatakan orang lain kepada Anda, pengguna (melalui BACK) atau kode Anda (via finish()
) dapat menutup aktivitas yang sedang berjalan. Pengguna umumnya tidak memerlukan hal lain, untuk aplikasi yang ditulis dengan benar, tidak lebih dari yang mereka butuhkan opsi "keluar" untuk menggunakan aplikasi Web.
Tidak ada dua lingkungan aplikasi yang sama, menurut definisi. Ini berarti bahwa Anda dapat melihat tren di lingkungan saat yang baru muncul dan yang lain terkubur.
Misalnya, ada gerakan yang tumbuh untuk mencoba menghilangkan gagasan "file". Sebagian besar aplikasi Web tidak memaksa pengguna untuk memikirkan file. Aplikasi iPhone biasanya tidak memaksa pengguna untuk memikirkan file. Aplikasi Android umumnya tidak memaksa pengguna untuk memikirkan file. Dan seterusnya.
Demikian pula, ada gerakan yang tumbuh untuk mencoba menghilangkan gagasan "mengakhiri" aplikasi. Sebagian besar aplikasi Web tidak memaksa pengguna untuk keluar, tetapi secara implisit mengeluarkan pengguna setelah beberapa saat tidak aktif. Hal yang sama dengan Android, dan pada tingkat lebih rendah, iPhone (dan mungkin WebOS).
Ini membutuhkan lebih banyak penekanan pada desain aplikasi, fokus pada tujuan bisnis dan tidak bertahan dengan model implementasi yang terkait dengan lingkungan aplikasi sebelumnya. Pengembang yang tidak memiliki waktu atau kecenderungan untuk melakukan ini akan merasa frustrasi dengan lingkungan baru yang merusak model mental yang ada. Ini bukan kesalahan dari salah satu lingkungan, lebih dari itu adalah kesalahan gunung untuk badai yang mengalir di sekitarnya daripada melalui itu.
Sebagai contoh, beberapa lingkungan pengembangan, seperti Hypercard dan Smalltalk, memiliki aplikasi dan alat pengembangan berbaur dalam satu pengaturan. Konsep ini tidak menangkap banyak, di luar ekstensi bahasa ke aplikasi (misalnya, VBA di Excel , Lisp di AutoCAD ). Pengembang yang datang dengan model mental yang menganggap keberadaan alat pengembangan dalam aplikasi itu sendiri, oleh karena itu, harus mengubah model mereka atau membatasi diri pada lingkungan di mana model mereka akan berlaku.
Jadi, ketika Anda menulis:
Seiring dengan hal-hal berantakan lainnya yang saya temukan, saya pikir mengembangkan aplikasi kami untuk Android tidak akan terjadi.
Tampaknya itu untuk yang terbaik, untuk Anda, untuk saat ini. Demikian pula, saya akan menasihati Anda untuk tidak mencoba mem-port aplikasi Anda ke Web, karena beberapa masalah yang sama dengan yang Anda laporkan dengan Android juga akan Anda temukan di aplikasi Web (mis., Tidak ada "terminasi"). Atau, sebaliknya, suatu hari jika Anda melakukan porting aplikasi Anda ke Web, Anda mungkin menemukan bahwa aliran aplikasi Web mungkin lebih cocok untuk Android, dan Anda dapat mengunjungi kembali port Android pada waktu itu.