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

最近看了一篇文章#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中添加一个无参的构造方法!顺利通过运行


你可能感兴趣的:(Android)