- 点击跳转=>Unity3D特效百例
- 点击跳转=>案例项目实战源码
- 点击跳转=>游戏脚本-辅助自动化
- 点击跳转=>Android控件全解手册
- 点击跳转=>Scratch编程案例
- 点击跳转=>软考全系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单。
👉实践过程
上图中这个错误是同事在继承Activity重写父类的onCreate方法时由于没有调用super.onCreate()而引发的问题,属于运行时异常,诸如activity的其他周期方法也会出现类似问题。由此可见,android api中当我们继承某些类重写一些方法时,有些是要求必须调用super方法的。
但是这个异常不常见,如果遇到这样的异常有两种可能:
- 一种是在Activity中的生命周期中的方法中没有复写父类的方法
- 另一种是在Fragment中的生命周期中的方法中没有复写父类的方法
知道了原因我们解决起来就很简单了,
//探讨:根据报错信息的提示:由于没有销毁fragment,导致activity没法销毁。扭头一看原来还真的是这样,直接贴代码
@Override
public void onDestroy() {
//......
}
//在当前的fragment类的onDestroy方法里没有调用父类的onDestroy()方法,导致了异常的发生。正确的代码应该是:
@Override
public void onDestroy() {
super.onDestroy();
//......
}
知道了解决方法,我们再看下 Activity 源码。
我们不难发现这个类里好多on开头的周期方法还有好多perform开头的执行周期方法的方法
从函数方法名我们就可以猜出这个方法应该是调用了onStart()方法,方法里有把mCalled置为false的操作,这个mCalled是类里的一个全局变量,接着调用了callActivityOnStart(this)方法,然后我们再看看第二幅图中的callActivityOnStart(Activity activity)函数,代码很少,就一行,那就是调用onStart()方法,再瞅瞅第三幅图是onStart方法,有一行mCalled = true 的操作,然后回到第一幅图中往下看有个if语句判断mCalled,可以看出如果不执行this.onStart()方法就没法把mCalled置为true,这就会导致 !mCalled 值为true肯定就执行这个抛错语句。可能这时候大家会想我们可以不调用super,直接在子类里把mCalled变量改为true不就可以了吗,可是这个mCalled变量(boolean mCalled;)是缺省类型的,不能被子类调用。所以只能通过调用super方法的形式来达到程序正常运行的效果。
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。