重写Activity等Android组件构造函数的那些坑

文章探讨了在Android开发中重写Activity等组件构造函数可能导致的问题。虽然可以成功实例化带参数的构造方法,但当尝试通过Intent启动此类组件时,会抛出`InstantiationException`,因为系统需要无参构造函数来创建组件实例。提醒开发者遵循最佳实践,避免重写组件的构造函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了一篇文章#Effective Android# 不要重载组件的构造函数(No.1)(应该叫重写),引发思考,一直没发现这个问题,在此记下,希望和各位共同学习。废话不多说,上代码:



在继承于Activity的类MyActivity中给出带参数的构造方法

public MyActivity(Context context){
...
}


实例化:

MyActivity activity = new MyActivity(context);

运行通过!!!


但是

如果在其他界面通过如下方式跳转MyActivity时:

Intent intent = new Intent(MainActivity.this,MyActivity.class);

startActivity(intent);


会抛出如下异常:

Caused by: java.lang.InstantiationException: class com.XXX.MyActivity has no zero argument constructor


猜想:
通过Intent方式去打开一个Activity,android可能需要一个默认的无参构造方法去实例化跳转的Activity对象,此时我们已经给出了MyActivity带参的构造方法,相当于此时MyActivity无参的构造方法已经无效,所以会报没有无参构造器的异常!!!
解决:
在MyActivity中添加一个无参的构造方法!顺利通过运行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值