1.Java在Android中的地位演变
虽然Google在2017年宣布Kotlin成为Android官方开发语言,但Java从未退出舞台。现有数十万个Android应用由Java编写,包括许多大型应用(如Twitter、Spotify早期版本)。GooglePlay上架的应用中,超过60%包含Java代码。Java拥有完整的工具链、海量的库和开发人员,在企业内部移动开发中依然被广泛采用。许多大型公司出于历史原因、人员技能或与后端共享代码的考虑,继续使用Java进行Android开发。
参考:https://npqev.cn/category/jieri-yonghua.html
2.JavaAndroid应用的基本架构
Android应用主要组件:Activity(界面)、Service(后台)、BroadcastReceiver(系统事件)、ContentProvider(数据共享)。Java通过AndroidSDK调用这些组件的API。一个典型的业务模块:网络请求(OkHttp)、JSON解析(Gson)、图片加载(Glide)、数据库(Room或SQLite)。这些库都是Java编写或提供Java绑定。
3.多线程与性能优化
Android应用不能在主线程做网络或数据库操作,否则会触发ANR。Java提供了多种异步方案:
AsyncTask(已废弃,但仍有许多老代码)
Thread+Handler/Looper
ExecutorService(线程池)
RxJava(响应式扩展,Java版本)
Coroutines(Kotlin主导,但Java可通过回调桥接)
性能优化方面,Java开发者需要关注:避免内存泄漏(尤其匿名内部类持有关联Activity引用)、使用SparseArray替代HashMap更省内存、启用ProGuard/R8代码混淆和收缩、利用android:largeHeap谨慎使用。
4.Java与Kotlin互操作
如果一个项目既有Java也有Kotlin,两者可以无缝互调。Java可以调用Kotlin的@JvmStatic方法,Kotlin也能访问Java的getter/setter。这种互操作性允许团队逐步迁移:新模块用Kotlin,老模块保持Java。许多第三方库仍提供Java示例和API。
参考:https://npqev.cn/category/huayu-huayi.html
5.案例:银行类App为什么坚持Java
某大型银行移动端App,用户数千万,功能包括账户查询、转账、理财购买。该App最初完全用Java开发,积累了数十万行业务代码。团队规模50+人。即使Kotlin成为主流,迁移成本过高(培训、重写、潜在bug)。他们采取以下策略:
所有新功能使用Kotlin编写,与Java互操作。
核心交易模块(涉及多线程同步、安全加密)保持Java,因为现有测试和审计流程完备。
使用Java编写关键工具类(如SharedPreferences封装),供Kotlin调用。
在CI中同时检查Java和Kotlin代码质量。
最终,他们享受了Kotlin的现代语法(数据类、空安全),也保护了既有Java投资。App的崩溃率保持在0.1%以下。
6.Java在Android上的局限性
与Kotlin相比,Java的短板包括:
空安全:必须手动检查null,容易引发NullPointerException。
冗长:数据类需要写大量getter/setter、equals/hashCode。
协程:Java没有原生协程,异步代码回调嵌套多。
函数式编程支持弱:StreamAPI在低API级别需要desugar。
但这些缺点可以通过工具缓解:Lombok(但Android支持不好)、AutoValue、RxJava等。
7.未来发展
Google仍在更新Android的Java支持:从Java7到Java8,再到Java11/17的部分特性(通过desugar)。新AndroidStudio对Java代码提示、重构、性能分析依然完善。对于企业级Android开发,Java作为Kotlin的“平替”还将长期存在。尤其在系统级开发(AOSP本身大量使用Java)和需要与后端共享代码的场景(如通过JAR复用业务逻辑),Java不可替代。
8.总结
Java在Android开发中并未消亡,而是与Kotlin共存。对于已有大型Java代码库的团队,继续使用Java是合理选择。新项目推荐Kotlin,但理解Java对于维护老应用、阅读AOSP源码、掌握JVM原理仍然至关重要。
参考:https://npqev.cn