Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在onDestroy()中调用finish()有意义吗?_Android_Cordova - Fatal编程技术网

Android 在onDestroy()中调用finish()有意义吗?

Android 在onDestroy()中调用finish()有意义吗?,android,cordova,Android,Cordova,我正在尝试调试我们的应用程序的一个问题。我们的应用程序使用了一个框架(Phonegap),它基本上做了以下奇怪的事情: @Override public void onDestroy() { super.onDestroy(); finish(); } 这对我来说似乎是错误的,但我不是安卓编程专家。根据我对活动生命周期的理解,onDestroy通常作为调用finish()的结果被调用,但决不能反过来调用 要澄清的是,首先调用onDestroy的唯一原因是它实际上已经被先前对finis

我正在尝试调试我们的应用程序的一个问题。我们的应用程序使用了一个框架(Phonegap),它基本上做了以下奇怪的事情:

@Override
public void onDestroy()
{
  super.onDestroy();

  finish();
}
这对我来说似乎是错误的,但我不是安卓编程专家。根据我对活动生命周期的理解,
onDestroy
通常作为调用
finish()
的结果被调用,但决不能反过来调用


要澄清的是,首先调用onDestroy的唯一原因是它实际上已经被先前对
finish()
的调用破坏了。在onDestroy中再次调用
finish()
正确吗?

正确<代码>完成()。该活动已被拆除

另一方面,我不认为这会引起问题。该框架对
finish()
调用非常宽松(我以前在同一个活动中有两个调用,但我已经好几个月没有发现了)。:)


再往回看,您是否怀疑您遇到的另一个问题可能与此有关?

没错<代码>完成()。该活动已被拆除

另一方面,我不认为这会引起问题。该框架对
finish()
调用非常宽松(我以前在同一个活动中有两个调用,但我已经好几个月没有发现了)。:)


再往回看,您是否怀疑您遇到的另一个问题可能与此有关?

一般来说,调用
finish()
将触发对
onDestroy()
的调用,但这并不能保证

在调用
finish()
和调用
onDestroy()
之间,您的应用程序进程可能会终止,或者电池可能会耗尽等等

因此,正如文档中所述,调用
finish()


您还可以使用
isFinishing()
来确定活动是否已经在完成过程中。

一般来说,调用
finish()
将触发对
onDestroy()
的调用,但这并不能保证

在调用
finish()
和调用
onDestroy()
之间,您的应用程序进程可能会终止,或者电池可能会耗尽等等

因此,正如文档中所述,调用
finish()


您还可以使用
isFinishing()
来确定活动是否已经在完成过程中。

onPause()isFinishing(),它会在onPause中知道活动是否正在完成

onPause()isFinishing(),它会在onPause中知道活动是否正在完成

您仍然可以调用
onDestroy()
活动中的
,但是重写
onDestroy
方法的方式将导致异常
SuperNotCalledException
。这是因为您不能在不调用其
super.ondestory()的情况下销毁活动

问题:

@Override
public void onDestroy()
{
  finish(); //will finish but will catch an exception "SuperNotCalledException"
}
@马蒂亚斯

我做这件事的方式

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("I am called", "I am called");
    finish();

}

事实上,只有在添加
super.ondestory()时,此实现才会工作

您仍然可以在
活动中调用
ondestory()
,但是覆盖
ondestory
方法的方式将导致异常
SuperNotCalledException
。这是因为您不能在不调用其
super.ondestory()的情况下销毁活动

问题:

@Override
public void onDestroy()
{
  finish(); //will finish but will catch an exception "SuperNotCalledException"
}
@马蒂亚斯

我做这件事的方式

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("I am called", "I am called");
    finish();

}
事实上,只有在添加
super.ondestory()时,此实现才会工作

您最好在
onDestroy()
之前进行清理,因为很可能根本不会调用
onDestroy()
。从
onDestroy()的文档中:

注意:不要指望调用此方法作为保存位置 数据例如,如果活动正在编辑内容中的数据 提供程序,这些编辑应在onPause()或 onSaveInstanceState(Bundle),不在这里。这种方法通常是有效的 实现以释放资源,如与 活动,这样被破坏的活动就不会留下这样的东西 大约在其应用程序的其余部分仍在运行时。有 系统将简单地终止活动的宿主的情况 进程,而不在其中调用此方法(或任何其他方法),因此 不应该被用来做打算留在身边的事情 过程结束后

作为OP和其他帖子的旁注,大家都应该查看Android生命周期并阅读生命周期回调的API文档。显然,对生命周期方法有很多模糊的理解,因为这些线程不断出现。

您最好在
ondestory()
之前进行清理,因为很可能根本不会调用
ondestory()
。从
onDestroy()的文档中:

注意:不要指望调用此方法作为保存位置 数据例如,如果活动正在编辑内容中的数据 提供程序,这些编辑应在onPause()或 onSaveInstanceState(Bundle),不在这里。这种方法通常是有效的 实现以释放资源,如与 活动,这样被破坏的活动就不会留下这样的东西 大约在其应用程序的其余部分仍在运行时。有 系统将简单地终止活动的宿主的情况 过程w