Cara Memecahkan 13 Pesan Kesalahan Paling Umum Di Android
Pengujian adalah bagian penting dari pengembangan Android, yang memungkinkan Anda menghilangkan semua bug, kesalahan, dan masalah kinerja yang mungkin tersembunyi di aplikasi Anda, sebelum Anda melepaskannya di masyarakat umum.
Setiap kali Anda mengalami kesalahan, Android menghasilkan pesan kesalahan, lalu menampilkan pesan itu sebagai bagian dari Logcat Monitor Android Studio atau sebagai dialog pada perangkat yang Anda gunakan untuk menguji aplikasi Anda.
Pesan kesalahan ini biasanya singkat dan langsung, dan pada pandangan pertama mungkin tidak terlalu membantu. Namun, pesan ini benar-benar berisi semua informasi yang Anda perlukan untuk mengembalikan proyek Anda—Anda hanya perlu tahu cara menguraikannya!
Pada artikel ini, kita akan melihat secara mendalam 13 pesan kesalahan yang paling mungkin Anda hadapi saat mengembangkan aplikasi Android apa pun. Kita akan memeriksa apa arti sesungguhnya dari masing-masing pesan kesalahan ini, memeriksa semua kemungkinan alasan mengapa Anda menemukan setiap kesalahan, dan yang terpenting, berbagi petunjuk langkah demi langkah tentang bagaimana Anda dapat mengatasinya.
Melihat Pesan Kesalahan
Ada banyak pesan kesalahan yang mungkin Anda hadapi saat menguji aplikasi Anda, mulai dari kesalahan parah yang akan menyebabkan aplikasi Anda macet saat pertama kali Anda mencobanya di perangkat target hingga kesalahan yang lebih halus yang menurunkan kinerja aplikasi Anda dari waktu ke waktu.
Bergantung pada jenis kesalahan yang Anda hadapi, Android akan menampilkan pesan kesalahan baik pada perangkat yang Anda gunakan untuk menguji aplikasi Anda atau di Android Studio.
Melihat pesan kesalahan yang muncul pada perangkat fisik atau AVD mudah dilakukan—Anda hanya perlu memperhatikan setiap dialog yang muncul di layar perangkat Anda! Namun, kesalahan yang muncul di Android Studio bisa jadi rumit, karena Logcat Monitor mencatat sejumlah besar informasi, sehingga ini akan mudah terjadi untuk melewatkan pesan kesalahan yang penting.
Cara termudah untuk memastikan Anda tidak melewatkan pesan kesalahan adalah dengan membuka dropdown Verbose Logcat Monitor dan mengaturnya ke Error, yang akan menyaring semuanya kecuali pesan kesalahan.
1. R.layout.main Cannot Be Found / Cannot Resolve Symbol R
Kesalahan ini disebabkan saat Android Studio tidak dapat membuat file R.java Anda dengan benar, dan terkadang dapat muncul entah dari mana—satu menit semuanya akan berjalan dengan baik, dan menit berikutnya setiap bagian dari proyek Anda gagal dikompilasi. Untuk membuat keadaan menjadi lebih buruk, ketika Android Studio menemukan kesalahan R.layout, biasanya akan menandai semua file sumber tata letak Anda karena mengandung kesalahan, yang membuat sulit untuk mengetahui dari mana harus mulai mencari sumber kesalahannya.
Seringkali, solusi yang paling efektif adalah yang paling sederhana: bersihkan dan bangun kembali proyek Anda. Pilih Build > Clean Project dari toolbar Android Studio, tunggu beberapa saat, dan kemudian bangun proyek Anda dengan memilih Build > Rebuild Project.
ika satu siklus clean/rebuild tidak berjalan, cobalah mengulangi proses ini beberapa kali, karena beberapa pengembang telah melaporkan hasil positif setelah menyelesaikan beberapa siklus clean/rebuild dengan cepat.
Jika Anda mengalami kesalahan ini setelah memindahkan beberapa file dan direktori di sekitar, mungkin ada kesalahan R.layout disebabkan oleh ketidakcocokan antara cache Android Studio dan tata letak proyek Anda saat ini. Jika Anda menduga ini mungkin terjadi, pilih File > Invalidate Caches / Restart > Invalidate and Restart dari toolbar Android Studio.
Masalah dengan nama sumber daya Anda juga dapat mencegah file R.java tidak dibuat dengan benar, jadi periksalah bahwa Anda tidak memiliki banyak sumber dengan nama yang sama dan tidak ada nama file Anda yang berisi karakter yang tidak valid. Android Studio hanya mendukung huruf kecil a-z, 0-9, pemberhentian penuh dan garis bawah, dan satu karakter tidak valid dapat menyebabkan kesalahan R.layout di keseluruhan proyek Anda, walaupun Anda tidak benar-benar menggunakan sumber ini di manapun dalam proyek Anda!
Jika Anda mengidentifikasi dan mengatasi kesalahan, namun Android Studio masih menampilkan kesalahan R.layout, Anda mungkin perlu menyelesaikan siklus clean/rebuild kembali sebelum Android Studio mencatat perubahan Anda dengan benar.
2. Too Many Field References….Max is 65,536
Saat Anda mengkompilasi aplikasi Anda, APK berisi file bytecode yang dapat dijalankan dalam bentuk berkas bytecode Dalvik Executable (DEX). Spesifikasi DEX menyatakan bahwa file DEX tunggal dapat mereferensikan metode maksimum 65.536, dan jika Anda menemukan kesalahan Too many fields… maka itu berarti aplikasi Anda telah melampaui batas ini. Perhatikan bahwa ini adalah batasan jumlah metode referensi proyek Anda, dan bukan jumlah metode yang didefinisikan oleh proyek Anda.
Jika Anda menemukan kesalahan ini, Anda bisa:
* Kurangi jumlah referensi dalam proyek Anda. Salah satu cara yang paling efektif untuk memangkas referensi metode Anda adalah dengan meninjau ketergantungan aplikasi Anda, karena ini sering menjadi salah satu kontributor terbesar metode referensi.
* Konfigurasikan aplikasi Anda untuk menggunakan lebih dari satu file DEX, dengan mengaktifkan multidex.
Proses mengaktifkan dukungan multidex akan bervariasi tergantung pada versi Android yang didukung proyek Anda.
Jika Anda menargetkan Android 5.0 atau lebih tinggi, maka langkah pertama adalah membuka file tingkat modul build.gradle dan menetapkan multiDexEnabled menjadi true:
android {
defaultConfig { minSdkVersion multiDexEnabled true
Namun, jika minSdkVersion Anda 20 atau lebih rendah, maka Anda perlu menambahkan atribut multiDexEnabled true dan kemudian menambahkan pustaka dukungan multidex sebagai ketergantungan proyek:
dependencies {
compile ‘com.android.support:multidex:1.0.1’
}
Langkah selanjutnya tergantung pada apakah Anda mengesampingkan kelas Application atau tidak.
Jika proyek Anda menimpa kelas Application, buka Manifest Anda dan tambahkan yang berikut ke tag : … … …
Jika proyek Anda tidak menggantikan kelas Application, Anda harus memperpanjang MultiDexApplication sebagai gantinya:
public class MyApplication extends MultiDexApplication
Akhirnya, jika Anda menimpa kelas Application tapi tidak dapat mengubah kelas dasar, Anda dapat mengaktifkan multidex dengan mengesampingkan metode attachBaseContext() dan memanggil MultiDex.install(this), misalnya:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
3. Please Choose a Valid JDK Directory
Jika Anda mendapatkan kesalahan JDK kapan pun Anda mencoba membuat aplikasi Anda, berarti Android Studio sedang berusaha untuk menemukan di mana JDK diinstal pada mesin pengembangan Anda.
Untuk memperbaiki kesalahan ini:
* Pilih File > Project structure… dari toolbar Android Studio.
* Pilih SDK Location dari menu sebelah kiri
* Pastikan kotak centang Use embedded JDK dipilih.
Jika ini tidak menyelesaikan masalah, maka navigasikan kembali ke File > Project structure… > SDK Location, dan masukkan secara manual full path file untuk JDK Anda. Jika Anda tidak yakin di mana JDK diinstal pada mesin pengembangan Anda, Anda dapat menemukannya dengan membuka Terminal (Mac) atau Command Prompt (Windows) dan memasukkan perintah berikut:
/usr/libexec/java_home
4. Error Installing APK
Meskipun AVD sangat bagus untuk menguji aplikasi Anda di berbagai perangkat keras dan perangkat lunak yang berbeda, Anda harus selalu menguji aplikasi Anda di setidaknya satu smartphone atau tablet Android fisik. Namun, kemampuan Android Studio untuk mengenali perangkat Android yang terhubung sangat terkenal.
Jika Anda telah menghubungkan perangkat Anda ke mesin pengembangan Anda namun mengalami pesan galat Error installing APK sewaktu Anda mencoba menginstal APK Anda, atau perangkat Anda bahkan tidak muncul di jendela Select Deployment Target, kemudian coba perbaikan berikut ini:
Periksa USB debugging diaktifkan.
Buka Settings perangkat Anda, lalu pilih Developer Options, dan pastikan USB Debugging diaktifkan. Jika Anda tidak melihat Developer Options di menu Settings, pilih About Phone dan tekan terus Build Number sampai pemberitahuan You are now a developer muncul. Kembali ke layar Settings utama, dan Anda harus menemukan bahwa Developer Options telah ditambahkan.
Periksa layar smartphone atau tablet Anda.
Terkadang perangkat Anda mungkin memerlukan beberapa input tambahan sebelum terhubung ke mesin pengembangan Anda. Misalnya, mungkin Anda meminta untuk memilih di antara berbagai mode, atau untuk secara eksplisit mengizinkan sambungan.
Pastikan Anda menginstal driver USB yang benar.
Jika Anda mengembangkan di Windows, Anda harus mendownload driver USB OEM yang sesuai untuk perangkat Anda. Jika Anda pengguna Nexus, Anda dapat mendownload driver Google USB melalui SDK Manager Android Studio.
Pastikan perangkat Anda memenuhi persyaratan SDK minimum proyek Anda.
Anda akan menemukan SDK minimum proyek Anda di file tingkat modul grade.build Anda, dan dapat memeriksa versi Android yang diinstal pada perangkat Anda dengan membuka Settings dan lihat di bagian About Phone.
Coba mulai ulang proses adb (Android Debug Bridge) Anda.
Buka jendela Terminal atau Command Prompt, lalu pindah direktori (cd), kemudian arahkan ke jendela platform-tools Anda, misalnya:
cd /Users/Downloads/adt-bundle-mac/sdk/platform-tools
Kemudian, matikan dan restart proses adb dengan memasukkan perintah berikut, satu demi satu:
./adb kill-server
./adb start-server
Restart semuanya!
Jika semuanya gagal, maka coba lepaskan dan kemudian hubungkan kembali perangkat Anda, mulai ulang perangkat Anda, memulai ulang Android Studio dan, sebagai upaya terakhir mutlak, memulai kembali mesin pengembangan Anda.
5. INSTALL_FAILED_INSUFFICIENT_STORAGE
Jika Anda mengalami kesalahan ini saat mencoba menginstal proyek Anda, berarti perangkat target tidak memiliki cukup memori.
Jika Anda mencoba menginstal proyek Anda di AVD, Anda harus memeriksa berapa banyak ruang yang telah Anda tetapkan untuk AVD khusus ini:
* Jalankan AVD Manager.
* Temukan AVD yang dimaksud, dan klik ikon Edit this AVD.
* Di jendela yang muncul, klik Show Advanced Settings.
* Gulir ke bagian Memory and Storage.
Bagian ini mencantumkan berbagai jenis memori yang telah Anda alokasikan ke AVD khusus ini. Jika salah satu dari nilai-nilai ini sangat rendah, maka Anda harus meningkatkannya untuk lebih mencerminkan memori yang tersedia untuk smartphone atau tablet Android khas Anda:
* RAM. Jumlah RAM yang tersedia untuk perangkat yang diemulasikan.
* VM Heap. Berapa banyak ruang heap (yaitu memori) dialokasikan ke Virtual Machine (VM) dari smartphone atau tablet yang diemulasikan.
* Internal Storage. Jumlah memori non-removable yang tersedia untuk perangkat yang diemulasikan.
* SD card. Jumlah memori yang dapat dilepas tersedia. Jika Anda ingin menggunakan kartu SD virtual yang dikelola oleh Android Studio, pilih Studio-managed dan masukkan ukuran kartu SD virtual yang ingin Anda buat (nilai minimum yang disarankan adalah 100 MB). Sebagai alternatif, Anda dapat mengatur “ruang” kartu SD dalam sebuah file, dengan memilih Eksternal file dan kemudian menentukan lokasi yang ingin Anda gunakan.
Jika tidak ada yang aneh dengan memori AVD Anda, atau Anda mencoba memasang aplikasi Anda di smartphone atau tablet Android fisik, kesalahan ini biasanya berarti aplikasi yang dikompilasi terlalu besar. Aplikasi yang membutuhkan gigitan yang signifikan dari memori perangkat saat menginstal tidak akan pernah turun dengan baik.
Jika Anda perlu mengurangi secara dramatis ukuran APK Anda, cobalah teknik berikut ini:
* Gunakan ProGuard untuk menghapus kelas, field, metode, dan atribut yang tidak terpakai. Untuk mengaktifkan ProGuard, buka file tingkat modul build.gradle Anda dan tambahkan yang berikut ini:
buildTypes { release {
//Enable ProGuard// minifyEnabled true
//Since we want to reduce our APK size as much as possible, I’m using the settings from the proguard-android-optimize.txt file// proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’ }
}
}
* Gunakan aapt tool untuk mengoptimalkan drawables Anda dengan kompresi lossless, atau gunakan program yang dirancang untuk mengurangi ukuran file PNG Anda (zopflipng, pngcrush, OptiPNG, TinyPNG, atau pngquant) atau ukuran JPEG Anda (packJPG). Sebagai alternatif, Anda mungkin ingin mencoba mengganti file PNG dan JPEG Anda dengan gambar dalam format WebP.
* Ingatlah untuk menghapus semua fungsionalitas terkait debug dari versi rilis aplikasi Anda. Android tidak memerlukan informasi ini untuk dijalankan, jadi hanya mengambil ruang yang tidak perlu.
* Menjelajahi proyek Anda untuk sumber duplikat apa pun. Bahkan sumber daya ringan seperti duplikat string yang menambah sesuatu ke dalam ukuran APK akhir Anda.
* Gunakan Lint untuk mengidentifikasi sumber daya yang tidak disebutkan di manapun dalam kode Anda, dan hapus sumber daya ini. Untuk menjalankan Lint, pilih Analyze > Inspect Code… dari toolbar Android Studio.
* Aktifkan penyusutan sumber daya, dengan menambahkan shrinkResources true ke file build.gradle proyek Anda.
* Jika Anda perlu menggunakan variasi gambar yang sama, gunakan gambar dasar yang sama dan sesuaikan saat runtime, daripada menambahkan beberapa versi gambar yang sama ke proyek Anda. Misalnya, Anda dapat menerapkan berbagai warna pada gambar menggunakan android:tint dan tintMode, dan Anda dapat merotasi gambar menggunakan android:fromDegrees, android:toDegrees, android:pivotX, dan android:pivotY.
* Optimalkan pustaka Anda. Cobalah untuk menghapus perpustakaan yang tidak perlu atau padat memori dari proyek Anda. Jika Anda perlu menggunakan pustaka besar, periksa apakah ada cara untuk mengoptimalkan pustaka ini untuk lingkungan mobile, karena kode pustaka eksternal seringkali tidak ditulis untuk pengoptimalan di mobile. Anda juga harus ingat bahwa banyak pustaka berisi sejumlah besar string terlokalisasi. Jika aplikasi Anda tidak secara resmi mendukung pustaka ini, Anda mungkin bisa mengurangi ukuran pustaka dengan memberi tahu Gradle agar tidak menyertakan string ini di APK terkompilasi Anda. Untuk menentukan bahasa yang didukung aplikasi Anda secara resmi, buka file tingkat modul build.gradle Anda dan gunakan atribut resConfigs. Sebagai contoh, di sini kami menetapkan bahwa kami hanya ingin memasukkan string bahasa Inggris dalam proyek kami:
android {
defaultConfig {
resConfigs “en”
* Pertimbangkan apakah APK Anda berisi sejumlah besar konten yang dapat diunduh oleh pengguna individual namun tidak pernah digunakan. Misalnya, perangkat dengan layar hdpi tidak banyak berguna untuk aset xxxhdpi! Salah satu cara paling efektif untuk mengurangi ukuran APK Anda adalah memisahkannya menjadi beberapa APK, jadi saat pengguna mengunduh aplikasi Anda, mereka akan menerima APK yang hanya berisi kode dan sumber daya yang masuk akal untuk perangkat tertentu mereka. Anda akan menemukan lebih banyak informasi tentang membuat APK yang menargetkan kepadatan layar yang berbeda dan ABI spesifik (antarmuka biner aplikasi) di dokumentasi resmi Android.
6. ActivityNotFoundException
ActivityNotFoundException terjadi ketika sebuah panggilan untuk startActivity(Intent) atau salah satu variannya gagal karena Activity tidak dapat menjalankan Intent yang diberikan.
Penyebab paling umum dari ActivityNotFoundException adalah lupa untuk menyatakan aktivitas dalam manifest Anda, jadi buka manifes Anda dan periksa apakah Anda telah mengumumkan semua aktivitas Anda. Anda juga harus memeriksa bahwa Anda telah menyatakan setiap activity dengan benar, menggunakan salah satu nama kelas yang memenuhi syarat atau berhenti penuh sebagai singkatan untuk nama paket. Sebagai contoh, kedua hal berikut ini valid:
Jika Anda tidak dapat menemukan masalah dengan manifes Anda, maka ada beberapa penyebab potensial ActivityNotFoundExceptions lainnya. Pertama, jika Anda mengalami kesalahan ini setelah memindahkan kelas Activity dari satu paket ke paket lainnya, kemungkinan Anda telah membingungkan Android Studio dan hanya perlu membersihkan dan membangun kembali proyek Anda.
ActivityNotFoundException juga dapat disebabkan jika kesalahan pada Activity target tidak dimuat dengan benar. Untuk memeriksa apakah ini terjadi dalam proyek Anda, masukkan kode tujuan Anda ke dalam blok coba-coba:
try {
//Your code here//
} catch ( ActivityNotFoundException e) { e.printStackTrace();
}
Jalankan aplikasi Anda lagi, dan kemudian lihat di Logcat Monitor Android Studio untuk melihat apakah itu menangkap pengecualian yang mungkin mencegah activity target tidak dibuat. Jika ini masalahnya, maka selesaikan kesalahan ini seharusnya juga bisa menyelesaikan ActivityNotFoundException.
7. ClassCastException
Kesalahan ClassCastException terkait dengan fitur konversi jenis Java, yang memungkinkan Anda mentransmisikan variabel satu jenis ke tipe yang lain. Anda menemukan ClassCastException saat Anda mencoba mentransmisikan objek ke kelas yang bukan sebuah instance. Misalnya, kedua cuplikan kode berikut akan menghasilkan ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
ImageView image = (ImageView)context.findViewById(R.id.button);
Pesan kesalahan ini berisi informasi tentang baris yang menyebabkan kesalahan ClassCastException, jadi arahkan ke bagian proyek Anda, periksa benda apa yang dilemparkan di sana, dan selesaikan ketidakcocokannya.
Jika Anda tidak dapat menemukan masalah dengan casting Anda, pertimbangkan apakah Anda baru saja memindahkan beberapa Views di file sumber tata letak Anda, karena beberapa pengguna telah melaporkan pertemuan ClassCastException setelah mengatur ulang Views mereka. Jika Anda menduga ini mungkin penyebab ClassCastException Anda, maka beri tahu Android Studio untuk meregenerasi file tata letak Anda dari nol, dengan melakukan siklus clean/rebuild. Ini memaksa Android Studio untuk mendaftarkan perubahan tata letak terkini Anda dengan benar, yang akan menyelesaikan ClassCastException Anda.
8. NullPointerException
Di Java, ketika Anda mendeklarasikan variabel referensi, Anda benar-benar membuat pointer ke objek. Anda dapat menyatakan bahwa sebuah objek saat ini menunjuk pada data yang tidak diketahui dengan menetapkan nilai null pada referensi objek tersebut. Nilai null dapat berguna dalam mengkodekan beberapa pola desain, namun jika Anda menjumpai NullPointerException (NPE), itu berarti Anda telah mencoba menggunakan referensi yang menunjuk pada nilai null, seolah-olah merujuk pada objek. Karena tidak ada kode untuk dieksekusi di lokasi di mana rujukan ini mengarah, Anda akan menemukan sebuah NPE.
NPE biasanya disertai informasi tentang di mana pengecualian ini tertangkap, sehingga Logcat Monitor harus berisi garis yang tepat dimana kesalahan ini terjadi. Arahkan ke area proyek Anda dan identifikasi referensi yang sama dengan null. Anda kemudian harus menemukan lokasi di mana nilainya harus ditetapkan, dan aturlah.
Metode findViewById juga dapat mengembalikan null jika View yang diminta tidak dapat ditemukan, jadi jika NPE Anda terjadi pada baris yang berisi findViewById, periksa apakah Anda telah menginisialisasi tata letak yang berisi View ini. Juga waspada terhadap kesalahan ejaan atau kesalahan ketik yang mungkin telah masuk ke dalam panggilan indViewById Anda, karena ini juga bisa menghasilkan NPE.
Untuk menghindari NPE yang terjadi dalam proyek Anda, pastikan semua objek Anda diinisialisasi sebelum Anda mencoba menggunakannya, dan pastikan selalu bahwa sebuah variabel tidak nol sebelum Anda meminta metode atau bidang dari objek itu.
9. Application Not Responding Error
Ini adalah kesalahan yang muncul sebagai dialog di perangkat Android atau AVD yang Anda gunakan untuk menguji aplikasi Anda. Kesalahan Application Not Responding (ANR) terjadi saat UI aplikasi Anda macet dan tetap tidak merespons masukan pengguna selama lebih dari lima detik. Hal ini biasanya terjadi karena aplikasi Anda mencoba melakukan operasi yang panjang atau intensif di UI thread utama Android.
Di Android, UI thread utama bertanggung jawab untuk mengirimkan semua peristiwa masukan pengguna ke widget UI yang sesuai, dan untuk memperbarui UI aplikasi Anda. Namun, thread ini hanya bisa memproses satu tugas pada satu waktu, jadi jika Anda memblokir thread utama dengan operasi yang berjalan lama atau intensif, UI Anda akan benar-benar tidak responsif sampai tugas ini selesai.
Jika Anda menemukan pesan ANR saat menguji aplikasi Anda, Anda pasti perlu melihat pekerjaan yang sedang Anda lakukan di thread utama. Namun, jika Anda tidak secara eksplisit menemukan kesalahan ini, namun perhatikan bahwa aplikasi Anda terkadang terasa lamban atau lamban, maka ini merupakan indikasi bahwa Anda berada di ambang kesalahan ANR, dan sekali lagi Anda harus melihat keadaan dari UI thread Anda
Untuk mengatasi kesalahan ANR (dan kesalahan near-ANR), Anda perlu mengidentifikasi semua operasi yang berpotensi berjalan lambat, atau memerlukan kekuatan pemrosesan yang signifikan, dan kemudian memindahkannya dari benang utama. Anda melakukan ini dengan membuat thread pekerja dimana operasi ini dapat dilakukan dengan risiko nol untuk memblokir thread UI utama.
Ada beberapa metode untuk membuat thread tambahan, namun solusi yang paling sederhana adalah menggunakan AsynTask, karena kelas ini sudah berisi thread pekerja sendiri dan onPosExecute() callback yang dapat Anda gunakan untuk berkomunikasi dengan thread UI utama Android.
Namun, AsyncTasks lebih cocok untuk melakukan operasi latar belakang pendek, jadi jika Anda perlu menjalankan operasi yang telah berjalan lama, Anda harus menggunakan Service atau IntentService.
Meskipun menjalankan tugas yang berjalan lama dan intensif dari thread utama akan memiliki dampak paling besar pada kinerja aplikasi Anda, sebaiknya praktikkan sesedikit mungkin pekerjaan di thread UI utama. Bahkan menjalankan sejumlah kecil kode yang tidak perlu di thread utama dapat berdampak pada daya tanggap aplikasi Anda, jadi begitu Anda berhasil memindahkan semua operasi yang berjalan lama dan intensif, Anda harus melihat apakah ada kode lagi yang dapat Anda lakukan untuk dipindah dari thread utama
10. Only the Original Thread That Created a View Hierarchy Can Touch Its Views
Di Android, Anda bisa mengupdate UI dari thread utama saja. Jika Anda mencoba mengakses elemen UI dari thread lainnya, Anda akan menemukan kesalahan ini.
Untuk mengatasi masalah ini, kenali bagian dari tugas latar belakang Anda yang mencoba memperbarui UI dan pindahkan ke runOnUiThread, misalnya:
runOnUiThread(new Runnable() { @Override public void run() {
//Update your UI// }
});
Sebagai alternatif, Anda dapat menggunakan handler atau melakukan pekerjaan latar belakang Anda di AsyncTask, karena Anda dapat berkomunikasi dengan thread utama menggunakan metode callback AsyncTask onPostExecute(). Akhirnya, jika Anda menemukan diri Anda secara teratur beralih di antara thread, Anda mungkin ingin melihat ke RxAndroid, karena pustaka ini memungkinkan Anda membuat thread baru, menjadwalkan pekerjaan yang akan dilakukan pada thread ini, dan kemudian memposting hasilnya ke thread utama, semua hanya dengan beberapa baris kode.
11. NetworkOnMainThreadException
Pengecualian ini dikeluarkan saat aplikasi Anda mencoba melakukan operasi jaringan di thread utama, seperti mengirim permintaan API, terhubung ke remote database, atau mendownload file. Karena operasi jaringan bisa memakan waktu dan padat karya, mereka sangat mungkin memblokir thread utama, jadi Android 3.0 (Honeycomb) dan yang lebih tinggi akan membuang kesalahan ini setiap kali Anda mencoba membuat permintaan jaringan di thread utama.
Jika Anda menemukan NetworkOnMainThreadException, temukan kode jaringan yang ada di thread utama Anda, dan pindahkan ke thread terpisah.
Jika Anda perlu sering melakukan permintaan jaringan, Anda mungkin ingin melihat Volley, sebuah pustaka HTTP yang memulai thread latar belakangnya sendiri sehingga semua permintaan jaringan dilakukan dari thread utama secara default.
12. Activity Has Leaked Window That Was Originally Added Here
Kesalahan ini terjadi saat mencoba menampilkan dialog setelah keluar dari Aktivitas. Jika Anda mengalami masalah ini, buka Activity Anda dan pastikan Anda menolak dialog dengan benar, dengan memanggil dismiss() dengan metode Activity onDestroy() atau onPause() Anda, misalnya:
@Override
protected void onDestroy()
{ super.onDestroy(); if(pDialogue!= null) pDialogue.dismiss();
}
13. OutofMemoryError
Kesalahan ini terjadi saat aplikasi Anda membuat permintaan memori agar sistem tidak dapat bertemu. Jika Anda menemukan pesan kesalahan ini, mulailah dengan mengesampingkan semua kesalahan manajemen memori yang paling umum. Periksa apakah Anda ingat untuk membatalkan pendaftaran semua receiver siaran Anda dan bahwa Anda telah menghentikan semua layanan Anda; pastikan Anda tidak memegang referensi pada variabel anggota statis, dan Anda tidak mencoba memuat semua bitmap besar.
Jika Anda telah mengesampingkan semua penyebab OutOfMemoryError yang jelas, maka Anda perlu menggali lebih dalam dan memeriksa dengan tepat bagaimana aplikasi mengalokasikan memori, karena kemungkinan ada beberapa area di mana Anda dapat memperbaiki pengelolaan memori aplikasi Anda.
Android Studio memiliki keseluruhan area yang didedikasikan untuk membantu Anda menganalisis penggunaan memori aplikasi Anda, jadi mulailah dengan memilih View > Tools Window dari toolbar Android Studio. Pada titik ini Anda akan melihat opsi Android Monitor atau Android Profiler, bergantung pada versi Android Studio yang telah Anda instal.
Kami telah membahas bekerja dengan Monitor Memori di situs ini sebelumnya, namun karena Android Profiler adalah tambahan baru untuk Android Studio, mari kita lihat sekilas fitur utamanya.
Saat membuka Android Profiler, ia mulai merekam tiga bagian informasi secara otomatis.
Karena kami tertarik pada cara aplikasi menggunakan memori, berikan bagian Memory satu klik, yang akan meluncurkan Memory Profiler.
Memory Profiler terdiri dari timeline yang menampilkan berbagai jenis memori yang saat ini dialokasikan oleh aplikasi Anda, misalnya Java, native, dan stack. Di atas grafik ini, Anda akan menemukan sederet ikon yang dapat Anda gunakan untuk memicu berbagai tindakan:
* Force a garbage collection event.
* Take an Hprof snapshot of the application memory. Ini adalah snapshot dari semua objek di tumpukan aplikasi Anda, termasuk jenis objek yang dialokasikan aplikasi Anda, jumlah objek yang dialokasikan, dan berapa banyak ruang yang dibawa objek ini.
* Record memory allocations. Dengan mencatat alokasi memori aplikasi Anda saat melakukan tindakan tertentu, Anda dapat mengidentifikasi operasi spesifik yang menghabiskan terlalu banyak memori.
Untuk mengidentifikasi bagian aplikasi Anda yang bertanggung jawab atas OutOfMemoryError, luangkan waktu untuk berinteraksi dengan aplikasi Anda, dan pantau bagaimana alokasi memori aplikasi Anda berubah sebagai respons terhadap tindakan yang berbeda. Setelah Anda mengidentifikasi bagian dari proyek Anda yang menyebabkan masalah, luangkan waktu untuk mengamatinya untuk kebocoran memori, dan juga ketidakefisienan apa pun dengan cara menggunakan memori.
Kesimpulan
Pada artikel ini, kita telah melihat 13 pesan kesalahan yang paling mungkin Anda hadapi saat mengembangkan Android. Kami membahas semua faktor yang berbeda yang dapat menjadi penyebab terhadap kesalahan ini, dan langkah-langkah yang perlu Anda ambil untuk mengatasinya.
Jika Anda terganggu oleh pesan kesalahan yang tidak kami cover, maka langkah pertama Anda harus menyalin / menempelkan seluruh pesan kesalahan ke Google, karena ini akan sering membuat tulisan dan posting blog di mana orang mendiskusikan bagaimana cara menyelesaikannya. kesalahan ini
Dan, jika Anda tidak dapat menemukan solusi di manapun di web, Anda dapat segera menghubungi komunitas Android untuk meminta bantuan secara langsung, dengan mengirimkan pertanyaan Anda ke Stack Overflow.
Sementara Anda berada di sini, lihat beberapa posting kami yang lain mengenai pengembangan aplikasi Android!}}}