Game saya menyimpan statusnya setelah interval tetap pada file di penyimpanan internal game / aplikasi. Ketika game saya terbunuh atau hancur oleh pengguna atau OS masing-masing, Kami menulis status permainan saat ini pada file itu. Menulis file setelah interval perbaikan berfungsi dengan baik tetapi ketika game macet / terbunuh oleh OS atau pengguna, operasi penulisan file gagal. Kegagalan operasi menghasilkan keadaan gim yang tidak lengkap atau keadaan gim kosong yaitu tidak ada data yang tertulis di file sama sekali. Saya telah mencoba beberapa solusi menggunakan layanan android, Seandainya layanan ini NON STICKY layanan terbunuh dengan aplikasi. Di sisi lain jika layanan STICKY maka itu restart tetapi niat yang dilampirkan pada awalnya dengan layanan adalah nol atau baru.
Pertanyaannya adalah bagaimana saya bisa menyimpan data saya (bisa ~ 2-3MB) sepenuhnya pada file di penyimpanan internal ketika game / aplikasi saya terbunuh oleh pengguna / OS?
Jawaban:
Saya menyarankan Anda untuk menulis save state dengan buffered ganda, seperti yang biasa dilakukan pada judul konsol di masa lalu (di mana Anda harus mengatasi kartu memori yang dihapus saat menulis dan menulis lambat).
Menyimpan:
Beban:
Alur ini akan berfungsi untuk memastikan selalu ada setidaknya satu penyimpanan yang valid masih ada di penyimpanan Anda, bahkan jika aplikasi tersebut terbunuh pada pertengahan penulisan. Pemain tidak akan mendapatkan perubahan apa pun dalam status permainan sejak save sebelumnya jika kegagalan semacam itu terjadi, tetapi mereka tidak harus memulai lagi.
Selain itu, Anda harus menyimpan segera setelah peristiwa utama (seperti pembelian dalam aplikasi) selain penghematan interval Anda, untuk meminimalkan jendela kerentanan di mana crash / kill akan menyebabkan acara utama tersebut hilang. Ini juga perlindungan terhadap eksploitasi gim (mis. Membunuh paksa aplikasi setelah kehilangan nyawa, karena Anda tahu Anda akan kembali ke keadaan gim sebelum Anda kehilangan nyawa, dan coba lagi). Tentu saja jika melakukan ini, Anda harus melindungi interval penyimpanan Anda dengan logika yang mengatakan "jika suatu penyimpanan sudah berlangsung, jangan mencoba untuk mulai menabung lagi."
sumber
java.nio.file.Files.move(Path source, Path target, CopyOption... options)
dapat melakukan penggantian nama dan penulisan ulang sebagai operasi atom.sync()
file B sebelum Anda memindahkannya ke file A (bahkan saat itu tidak ada jaminan lengkap, tetapisync()
cukup bagus).Android hanya membunuh aplikasi saat mereka berada di latar belakang. Apakah data game Anda benar-benar perlu diperbarui ketika aplikasi di latar belakang, atau bisakah Anda berhenti memperbarui data sampai aplikasi kembali ke latar depan? Anda mungkin dapat menunda pembaruan bahkan dalam gim multipemain, jika Anda dapat mengambil riwayat acara atau bahkan hanya keadaan saat ini ketika aplikasi kembali ke latar depan. Ini adalah sesuatu yang Anda mungkin harus lakukan untuk kepentingan CPU, jaringan, dan efisiensi baterai.
Jika pengguna membunuh aplikasi Anda, menjalankan layanan harus menerima panggilan ke
onTaskRemoved
. Saya tidak tahu apa yang akan terjadi jika Anda mencoba melakukan banyak pemrosesan dalam metode ini. Saya berharap jika itu tidak kembali dalam waktu tertentu, Android akan menjadikill -9
aplikasi Anda.sumber