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