Saya berada dalam situasi " khusus " tentang efisiensi program saya. Sekarang saya berada pada fase di mana saya perlu meningkatkan kinerja aplikasi dan mengurangi konsumsi baterai .
Sebelum pertanyaan:
- Pertama -tama, lamaran saya berfungsi. Ini berjalan dengan baik - tidak ada kesalahan apa pun .
- Kedua , saya telah membaca Mengoptimalkan Masa Pakai Baterai di situs web pengembang Android dan saya telah mengoptimalkan hal-hal kecil yang mereka minta. Tidak ada masalah apapun .
Sekarang, saya ingin tahu tentang perbaikan khusus pengembang lain yang telah mereka gunakan untuk mengoptimalkan aplikasi mereka sendiri. Hal-hal yang mungkin tidak pernah dikenali atau diperhatikan oleh pengguna. Namun, perbaikan akan meningkatkan masa pakai baterai atau membantu meningkatkan pemeliharaan aplikasi.
Jadi, apa trik pengoptimalan unik Anda?
Saya berada dalam situasi tertentu di mana saya benar-benar mencari pengetahuan dan saya pikir ini akan menjadi peluang bagus untuk berbagi pengetahuan pengembang tentang situasi yang mereka hadapi.
Tolong, pilih jawaban yang bagus karena itu akan mendorong pengembang hebat untuk berbagi pengetahuan mereka.
sumber
Jawaban:
Pada titik tertentu Anda akan sampai pada titik di mana menggunakan trik yang diketahui akan mencapai batasnya. Hal terbaik untuk dilakukan pada titik ini adalah membuat profil kode Anda dan melihat area mana yang menjadi leher botol berdasarkan kebutuhan spesifik Anda.
Menyelidiki penggunaan RAM menggunakan MAT dan Menggunakan Traceview : artikel tentang cara menggunakan alat untuk membuat profil aplikasi Anda.
sumber
Lacak dan squash alokasi. Semakin banyak Anda mengalokasikan, semakin sering pengumpul sampah perlu dijalankan, menghentikan proses Anda dari melakukan hal lain untuk jangka waktu yang relatif lama, seperti 100 md atau lebih.
Alat terbaik yang saya tahu untuk ini adalah Allocation Tracker yang disertakan dalam DDMS .
Tidak hanya GC yang dapat berdampak pada pengalaman pengguna, tetapi alokasi yang berlebihan dan GC menghabiskan beberapa sumber daya komputasi.
Berikut contoh dan trik kecil. Di aplikasi saya, saya memiliki jam yang menunjukkan waktu (audio) saat ini, termasuk sepersepuluh detik. Ini sering diperbarui. Dan TextView melakukan alokasi secara internal setiap kali Anda memanggil setText () dengan CharSequence. Tapi itu tidak mengalokasikan apa pun dengan varian setText (char [] text, int start, int len). Ini tidak didokumentasikan, dan tidak ada yang menjawab ketika saya bertanya tentang itu.
Ada banyak yang seperti ini. Dan ini adalah salah satu alasan mengapa aplikasi saya berisi 50% kode asli (tetapi ada alasan lain).
Selain itu, saya dapat menyarankan Anda untuk bereksperimen dengan ProGuard . Ia melakukan beberapa langkah pengoptimalan, dan mencatat informasi seperti metode yang tidak digunakan dalam proyek, yang dapat membantu Anda menghapus sisa dalam kode Anda.
sumber
Jika aplikasi Anda memiliki banyak waktu layar, gunakan warna hitam di mana pun Anda bisa . Itu akan mengurangi konsumsi baterai dari bagian terburuk perangkat: layar, khususnya di ponsel dan tablet AMOLED.
sumber
Untuk aplikasi dengan banyak aktivitas, pastikan Anda tidak memulai ulang aktivitas yang hanya perlu dibawa ke depan dengan menggunakan flag Intent yang sesuai. Periksa apakah heap Anda terkendali, dan tampilan, binding, dan konteks yang tidak perlu tidak sedang dibuat.
Saya menemukan alat terbaik untuk menunjukkan kepada Anda semua ini saat aplikasi berjalan:
sumber
Saat menggunakan SQLlite, beri perhatian khusus pada indeks. Jangan berasumsi apapun. Saya mendapatkan kecepatan yang luar biasa di Zwitscher, ketika saya meletakkan indeks pada kolom yang biasa digunakan untuk pencarian.
sumber
Beberapa tips yang dapat membantu Anda mengoptimalkan aplikasi Anda dalam hal UI :
digunakan
convertView
untuk adaptor daftar - akan sangat mahal jika Anda membuat tampilan baru di dalamAdapter.getView()
karena rutinitas ini dipanggil untuk setiap posisi dalam daftar. MenggunakanconvertView
memungkinkan Anda menggunakan kembali tampilan yang sudah dibuat. Contoh yang bagus (bersama dengan penggunaanViewHolder
) dapat ditemukan di ApiDemos .Mungkin saja tata letak Anda tidak sepenuhnya dioptimalkan dan dapat ditingkatkan (misalnya dengan menggunakan penggabungan atau penghapusan orang tua). Tata letak alat Android akan menemukan situasi seperti itu untuk Anda. Ini bisa digunakan dengan HierarchyViewer untuk memeriksa tampilan individual. Info selengkapnya di sini .
hapus drawable latar belakang - Kerangka kerja Android dulu (apakah masih memiliki?) masalah dalam mendeteksi tampilan apa yang harus digambar. Ada kemungkinan drawable latar belakang (default) Anda hanya akan ditarik untuk kemudian disembunyikan oleh UI buram Anda. Untuk menghilangkan gambar boros ini cukup hapus drawable latar belakang.
Itu bisa dilakukan dengan menggunakan gaya khusus
Beberapa tip yang dapat membantu Anda mengoptimalkan aplikasi Anda dalam hal penggunaan baterai :
periksa jenis jaringan dan tunggu sampai pengguna masuk ke area dengan wifi atau 3G (dan tidak roaming) dan baru kemudian izinkan dia untuk menggunakan koneksi
gunakan gzip untuk data tekstual jika memungkinkan untuk mempercepat pengunduhan dan penguraian
mendaur ulang objek java yang kompleks seperti
XmlPullParserFactory
/BitmapFactory
/StringBuilder
/Matcher
dll.Untuk trik baterai lainnya, lihat Coding for Life - Battery Life, That Is .
sumber
Sesuatu untuk dipikirkan: JANGAN menggunakan String secara berlebihan, misalnya dalam loop besar. Ini akan membuat banyak objek String yang harus di-GC. Contoh "Pengodean buruk" akan menghasilkan 2 objek string setiap loop. Contoh selanjutnya hanya akan menghasilkan satu String terakhir dan satu pembuat string tunggal. Ini membuat perbedaan besar saat mengoptimalkan putaran besar untuk kecepatan. Saya sering menggunakan stringbuilder saat membuat aplikasi Wordlist Pro Android, dan aplikasi ini menjadi sangat cepat saat menelusuri 270000 kata dalam waktu singkat.
Saya menulis posting blog yang lebih panjang tentang masalah ini. baca disini
sumber
Saya kira menggunakan variabel "final" di mana pun yang memungkinkan juga dapat meningkatkan kecepatan eksekusi.
sumber
Optimalkan gambar PNG Anda dengan alat seperti OptiPNG dan PNGCrush untuk mengurangi beberapa (kilo) byte dari ukuran APK. Kiat pengoptimalan gambar untuk situs web juga berlaku di sini: gunakan format gambar yang sesuai, mainkan dengan kompresi JPG, pertimbangkan untuk menggunakan transparansi biner daripada transparansi 8-bit, dll.
Jika Anda kapal PNG besar dengan alpha channel, Anda dapat perdagangan beberapa ukuran APK untuk kecepatan startup dan menggunakan JPG terpisah untuk RGB dan A saluran .
Jika Anda membuat koneksi HTTP, periksa apakah klien HTTP Anda menggunakan kompresi konten. Jika cache menerima respons HTTP, periksa apakah ia memahami dan menggunakan header HTTP terkait cache dengan benar.
sumber
Jika Anda memiliki operasi jaringan, coba gunakan kembali contoh httpclient yang sama. Hindari menggunakan ekspresi reguler.
sumber
Coba gunakan DDMS untuk melacak semua utas yang berjalan di sistem. Misalnya saya perhatikan bahwa saya menggunakan tampilan web untuk menampilkan konten html, saya perhatikan bahwa itu membuat beberapa utas untuk manajemen sesi manajemen cookie dll .. yang meningkatkan cetakan kaki memori saya. Jadi, kecuali Anda memiliki kebutuhan yang serius untuk menampilkan html yang kompleks, coba gunakan kelas utilitas normal "Html" di android untuk menampilkan konten html. Ini mungkin berguna untuk orang yang menampilkan Eula karena eula typicall berisi teks html.
Jika Anda harus melakukan operasi jaringan, coba gunakan AndroidHttpClient jika Anda seorang pemula, ini memiliki beberapa kemampuan yang baik untuk Caching sesi SSL dan semua itu sangat membantu dalam meningkatkan kinerja Anda. Selalu atur waktu tunggu koneksi soket Anda menjadi sekitar 60 detik atau nilai terbatas karena batas waktu tak terbatas dapat menyebabkan kebuntuan terutama jika Anda memutuskan koneksi selama jabat tangan ssl.
sumber
Gunakan Android Resource Tracker untuk menemukan sumber daya yang tidak digunakan dalam proyek Anda yang dapat dihapus.
sumber
Hindari menggunakan XPath jika Anda dapat mengurai input XML Anda dengan menggunakan rutinitas manipulasi string untuk mendapatkan teks di antara tag. Saya telah menguji dan dapat mengonfirmasi peningkatan 10x dalam kasus ini, pada kumpulan data 50000 item, pada HTC Desire.
sumber
Saya tahu saya akan bergabung nanti dalam percakapan ini, tetapi akan sempurna jika memiliki banyak tip bagus di satu tempat, jadi saya harap utas ini akan aktif dan sering diperbarui. Kiat saya:
..akan diperbarui..
sumber