作为一个有两、三年Android应用开发经验的码农,自然会遇到很多坑,下面是我能够想起的一些坑(实践证明不记笔记可不是个好习惯),后面有想到其它坑会陆续补上。
1.在Android library中不能使用switch-case语句访问资源ID:在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
2.不能在Activity没有完全显示时显示PopupWindow和Dialog:popupwindow - Problems creating a Popup Window in Android Activity
3.在多进程之间不要用SharedPreferences共享数据,虽然可以(MODE_MULTI_PROCESS),但极不稳定:android - MODE_MULTI_PROCESS for SharedPreferences isn't working
4.有些时候不能使用Application的Context,不然会报错(比如启动Activity,显示Dialog等):
5.同一个应用的JNI代码,不要轻易换NDK编译的版本,否则会有很多问题(主要是一些方法实现不一样,并且高版本对代码的检测更严格),比如r8没有问题,但到r9就有问题了,这是个大坑;
6.Android的JNI代码中,有返回类型的函数没有返回值编译的时候也不会报错;
7.当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在onPause方法中不适合做耗时较长的工作,这会影响到页面之间的跳转效率;
8.谨慎使用Android的透明主题,透明主题会导致很多问题,比如:如果新的Activity采用了透明主题,那么当前Activity的onStop方法不会被调用;在设置为透明主题的Activity界面按Home键时,可能会导致刷屏不干净的问题;进入主题为透明主题的界面会有明显的延时感;
9.不要在非UI线程中初始化ViewStub,否则会返回null;
10.公共接口一定要考虑到代码重入的情况,能设计为单例就尽量用单例;
11.不要通过Bundle传递大块的数据,否则会报TransactionTooLargeException异常:Java - Issue: Passing large data to second Activity
12.尽量不要通过Application缓存数据,这不稳定:不要在Android的Application对象中缓存数据!
13.尽量不要使用AnimationDrawable,它在初始化的时候就将所有图片加载到内存中,特别占内存,并且还不能释放,释放之后下次进入再次加载时会报错;
14.9图不能通过tinypng压缩,不然会有问题;
15.genymotion模拟器快是因为它是基于x86架构的,如果你的应用中用到了so,但没有x86架构的so,只能放弃使用它;Android Studio的模拟器也一样;
16.Eclipse的Android开发环境配置好后不要轻易升级ADT和build tools,不然会浪费你很多时间,还有就是一个workspace中的工程不要太多,不然每次启动都会很慢;
17.Android studio每个版本、gradle每个版本差别都比较大(我是这样认为的),对于jni代码的编译建议在Eclipse中进行,如果在Android studio中开发jni会浪费很多时间,主要是编译脚本的配置比较麻烦;
18.Eclipse中的Lint太不靠谱,特别是主工程中依赖library的时候,很多提示都是有问题的,建议使用Android Studio的工程清理工具,特别推荐;
19.不同API版本的AsyncTask实现不一样,有的是可以同时执行多个任务,有的API中只能同时执行一个线程,所以在程序中同时执行多个AsyncTask时有可能遇到一个AsyncTask的excute方法后很久都没有执行。调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案
20.同一个应用,相同的图片分别放在drawable-xxhdpi、drawable-xhdpi、drawable-hdpi、drawable-mdpi、drawable-ldpi中,在同一设备中占用的内存会大不一样(设备的dpi是固定的,图片放在不同的dpi文件夹下,在设备上显示时需要将图片转换成和当前屏幕一样dpi后在设备中显示,所以即使该图片在不同dpi文件夹下大小一样,但放在内存中的大小却不是一样的,并不一定是长*宽*4),做应用的内存优化之前可以先看一看你的工程是如何做屏幕适配的,是否有优化的空间。强烈推荐这个屏幕适配视频教程,花两个半小时就能看完:Android-屏幕适配全攻略
21.谨慎对待数据库升级(比如需要在原数据库中增加字段),避免数据丢失或者操作数据库异常的情况,数据库升级方法可以查阅《第一行代码》P263;
22.多个程序共用一套代码(一套代码,在桌面上多个图标)时需要处理好不同入口进入时的堆栈问题;
23.使用Adapter的时候,如果你使用了ViewHolder做缓存,在getView的方法中无论这项的每个视图是否需要设置属性(比如TextView设置的属性2可能为null,item的某一个按钮的背景为透明、某一项的颜色为透明等),都需要为每一项的所有视图设置属性(textview的属性为空也需要设置setText(""),背景透明也需要设置),否则在滑动的过程中会出现内容的显示错乱。
24.谨慎使用Android的多进程,多进程虽然能够降低主进程的内存压力,但会遇到如下问题:(1)不能实现完全退出所有Activity的功能(如果有同行在应用内采用多进程成功实现过完全退出程序欢迎沟通交流);(2)首次进入新启动进程的页面时会有延时的现象(有可能黑屏、白屏几秒,是白屏还是黑屏和新Activity的主题有关);(3)应用内多进程时,新启动一个进程都会重新跑一次Application的onCreate方法,不上重新创建一个Application,但会重新跑Application的onCreate,这样就不能在Application中缓存数据作为内存共享的途径了;(4)多进程间通过SharedPreferences共享数据时不稳定,具体可以查阅《Android开发艺术探索》。
25.使用Toast时,建议定义一个全局的Toast对象,这样可以避免连续显示Toast时不能取消上一次Toast消息的情况(如果你有连续弹出Toast的情况,避免使用Toast.makeText);
26.View的面积越大绘制的时间就越长,透明通道对View的绘制速度影响很大;
27.不要通过Msg传递大的对象,会导致内存问题。
相关推荐
深踩 Android Studio 缓存的坑及解决方法 Android Studio 是 Android 应用开发的主要 IDE,但是在使用过程中,我们经常会遇到缓存的...在使用 Gradle 依赖项时,我们需要注意缓存的问题,以免影响项目的开发和编译。
在Android开发过程中,开发者经常会遇到各种“坑”,这些坑可能会导致程序崩溃、性能下降或用户体验不佳。以下是一些常见的问题及解决策略: 1. **Android L主题颜色问题**: 当使用`colorPrimary`属性时,不能...
在Android中,短信权限(READ_SMS)用于读取短信内容,这对于许多需要短信验证或短信服务的应用而言是必不可少的。但MIUI中的通知类短信权限则指代另外一种特别的情况,它涉及到的是系统对短信通知类别的特殊处理...
在Android应用程序开发中,嵌入广告是常见的盈利方式之一,其中百度移动联盟广告是一个重要的平台。这个RAR压缩包文件包含了关于如何在Android应用中集成百度移动联盟广告的相关资源和代码示例。以下将详细讲解这一...
Android UI 开发中所遇到的各种坑是非常重要的,需要开发者们在开发中多加注意,以避免出现不必要的错误。同时,本文也提供了一些解决方案,希望能够帮助开发者们更好地开发 Android 应用程序。
在Android开发中,RecyclerView是一个非常重要的组件,它用于展示可滚动的列表数据,取代了旧版的ListView。这篇教程将详细介绍如何使用RecyclerView以及在实际应用中可能遇到的一些常见问题。 首先,RecyclerView...
通过这个源码项目,开发者可以学习到如何在Android Studio中创建一个功能完备的蓝牙服务端,理解蓝牙通信的基本流程和注意事项,为自己的蓝牙应用开发打下坚实基础。同时,也可以通过查看源码,学习其他开发者在处理...
在Android平台上进行微信支付开发时,开发者可能会遇到一系列挑战。...在实际开发过程中,还需要注意及时更新微信SDK,遵循最新的开发文档,以及关注微信支付的官方公告,以确保应用的兼容性和安全性。
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用内展示HTML内容,模拟一个轻量级的浏览器。然而,不恰当的使用往往会导致一系列问题,如内存泄漏、性能下降等。以下是一些关于WebView使用时需要...
Android Studio 3.5 及使用 AndroidX 的一些坑是 Android 开发者需要了解和掌握的重要知识点。随着 Google 的更新优化,AndroidX 成为了 Android Studio 3.5 的默认配置。这篇文章将详细介绍 Android Studio 3.5 及...
总的来说,`ViewPager`和`Fragment`的结合使用是Android开发中一种常见的实践,可以创建出丰富的交互体验。然而,需要注意的是,随着`Fragment`数量的增加,性能和内存管理将变得更为重要。因此,适时地进行优化,...
在Android平台上进行串口通信是实现设备间交互的重要方式,尤其在嵌入式开发和物联网应用中尤为常见。本文将详细介绍如何在Android 5.1.1系统上进行串口通信,以及在这个过程中可能遇到的问题。 首先,Android系统...
"AndroidStudio 4.0 New Class 的坑" AndroidStudio 4.0 新建类(New Class)中存在一些坑...通过以上总结,我们可以了解 AndroidStudio 4.0 中新建类的坑,并且可以根据需求进行修改和配置,从而提高开发效率和质量。
注意,`WXPayEntryActivity`需要在AndroidManifest.xml中声明为启动Activity,并设置类别为`com.tencent.mm.opensdk.pay.PayReq`。 6. **回调处理**: 支付成功或失败后,微信会通过`WXPayEntryActivity`回调结果...
在Android开发中,夜间模式是一种常见的功能,它允许用户在暗光环境下降低屏幕亮度和调整颜色,以减轻眼睛疲劳并节省电池。本篇文章将详细解释如何通过在窗口上添加一层半透明的View来实现Android的夜间模式。 首先...
Android Service中实现弹出对话框的坑 Android Service中实现弹出...Android Service 中实现弹出对话框需要注意多个方面的问题,包括手机版本问题、权限问题等。只有正确地处理这些问题,才能正常地实现弹出对话框。
总之,理解和正确使用LayoutInflater.inflate()的参数是避免Android开发中出现布局问题的关键。在使用时,确保提供适当的父容器,合理设置`attachToRoot`,并且始终关注视图的测量和布局过程。通过这些注意事项,...
在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...
在Android开发领域,Android Studio作为官方推荐的集成开发环境(IDE),已经成为开发者们的首选工具。本文将深入探讨Android Studio的常见问题及解决策略,同时涵盖AS版本、Gradle版本、BuildTools之间的关联,以及...