为什么java中的super.onDestroy() – Android在析构函数中排在前列?

我是java开发新手! 可能有人告诉我…根据哪个逻辑super.onDestroy(); 在析构函数上呢? 例如:

 protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); } 

并不是

 protected void onDestroy() { releaseMediaPlayer(); super.onDestroy(); } 

像c ++,obj-c,pascal等

4 Solutions collect form web for “为什么java中的super.onDestroy() – Android在析构函数中排在前列?”

这真的取决于你想在你的onDestroy做什么。 这是super.onDestroy所做的(按此顺序):

  • closures活动pipe理的任何对话框。
  • closures活动pipe理的所有游标。
  • closures任何打开的search对话框

如果您在onDestroy中放入的逻辑与android所做的三件事情有关,那么您可能不得不担心顺序。 否则,在大多数情况下,这并不重要。

在Reporting Work Status培训的ThreadSample.zip中,在onDestroy()中有一个注释

 public void onDestroy() { ... // Must always call the super method at the end. super.onDestroy(); } 

所以也许在使用广播接收机的时候,超级必须走到最后。

你有什么问题? 你可以做到这一点,这取决于你是否希望你的超类的onDestroy()之前调用。 通常我不认为它在android中很重要。

另外, onDestroy()不是析构函数。 它实际上并不摧毁对象。 这只是一个基于特定状态而调用的方法。 因此,在超类的onDestroy()运行并返回之后,您的实例仍然非常活跃。

*最有可能的是,android可以随时自由地杀死这个活动,但是你可以认为它仍然存在。

由于我们从基类的android类inheritance,总是让父类在创build过程中首先创build并初始化自己,并让子类在closures/停止组件的时候先取消初始化和释放资源。 这是推荐的方法。 但是,这完全取决于用例和场景。

 public void onCreate(Bundle bundle){ super.onCreate(bundle); //perform child class initializations. } public void onDestroy(){ //perform uninitialization and free resource super.onDestroy(); } 
  • 过滤LogCat只能从我的应用程序在Android中的消息?
  • setWidth(int pixels)使用dip还是px?
  • 如何使用gradle为所有模块定义常见的android属性
  • 更改ImageView来源
  • BitmapFactory.decodeResource在Android 2.2中返回一个可变的位图,在Android 1.6中返回一个不可变的位图
  • 以编程方式翻译视图前蜂窝
  • Android棒棒糖,AppCompat的ActionBar自定义视图不占用整个屏幕宽度
  • 捕获在Android上运行的本机代码引发的exception
  • 如何在NavigationView中设置自定义字体?
  • 如何使用Gradle创build发行版签名的apk文件?
  • 在底部工作表中禁用用户拖动