Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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-如何检测应用程序是否以编程方式终止?_Android - Fatal编程技术网

Android-如何检测应用程序是否以编程方式终止?

Android-如何检测应用程序是否以编程方式终止?,android,Android,每当我的应用程序手动或通过操作系统终止时,我想向服务器发送一个事件。是否有任何方法可以检测到应用程序终止。目前,我依靠活动生命周期的onStop()来检测它。但由于即使活动进入后台也会调用onStop(),所以我无法区分应用程序是暂停还是终止 请帮忙。提前感谢。您可以尝试onDestroy(),它在应用程序被系统销毁时运行。您的代码将如下所示: public void onDestroy() { super.onDestroy(); //Enter your code here to do st

每当我的应用程序手动或通过操作系统终止时,我想向服务器发送一个事件。是否有任何方法可以检测到应用程序终止。目前,我依靠活动生命周期的onStop()来检测它。但由于即使活动进入后台也会调用onStop(),所以我无法区分应用程序是暂停还是终止

请帮忙。提前感谢。

您可以尝试onDestroy(),它在应用程序被系统销毁时运行。您的代码将如下所示:

public void onDestroy() {
super.onDestroy();
//Enter your code here to do stuff
}
但是,在销毁应用程序时,应用程序使用的变量将随之销毁。

您可以尝试在系统销毁应用程序时运行onDestroy()。您的代码将如下所示:

public void onDestroy() {
super.onDestroy();
//Enter your code here to do stuff
}

然而,在销毁应用程序时,应用程序使用的变量将随之销毁。

我认为最好的解决方案是启动该服务。当应用程序被强制关闭或从最近的应用程序树中推出时,将重新启动自身的此类服务

因此,在重新启动此类服务时,您可以轻松地通知服务器应用程序已关闭。
请读出这篇有用的讨论和建议。如果您需要帮助,请告诉我。我认为最好的解决方案是启动服务。当应用程序被强制关闭或从最近的应用程序树中推出时,将重新启动自身的此类服务

因此,在重新启动此类服务时,您可以轻松地通知服务器应用程序已关闭。
请读出这篇有用的讨论和建议。如果您需要帮助,请告诉我

我使用Application.ActivityLifeCycleCallbacks解决了这个问题


我使用Application.ActivityLifeCycleCallbacks解决了这个问题


可以通过保存一个计数器来计算您创建了多少活动以及销毁了多少活动。您可以使用公共BaseActivity来执行此操作,也可以使用
ActivityLifecycleCallbacks

如果您只想知道应用程序是否由于异常而意外退出,您可以使用全局异常处理程序,请参阅

第三种选择: 如果应用程序以常规方式退出,请设置一个标志(即在
SharedReferences
中)

在onCreate中的应用程序类中,可以检查(并重置)此标志。这样你就可以在下一次启动应用程序时做些什么了

最后但并非最不重要的一点是,您可以重写
onBackpressed
方法


最佳选项取决于您需要解决的用例,它可以通过保留一个计数器来完成,即您创建了多少活动,以及销毁了多少活动。您可以使用公共BaseActivity来执行此操作,也可以使用
ActivityLifecycleCallbacks

如果您只想知道应用程序是否由于异常而意外退出,您可以使用全局异常处理程序,请参阅

第三种选择: 如果应用程序以常规方式退出,请设置一个标志(即在
SharedReferences
中)

在onCreate中的应用程序类中,可以检查(并重置)此标志。这样你就可以在下一次启动应用程序时做些什么了

最后但并非最不重要的一点是,您可以重写
onBackpressed
方法


最佳选项取决于您需要解决的用例

当它所在的
活动
被销毁时,将运行此选项。当
活动
正在进行配置更改(例如,正在旋转)时,它也会运行。你可以检查它是在更改配置还是以
isChangingConfigurations()
方法结束:嘿,Anirudh,我尝试了onDestroy(),但当我手动终止应用程序时,没有调用此方法。同样在android文档中,也给出了“在某些情况下,系统会在不调用此方法(或任何其他方法)的情况下简单地终止活动的托管进程,因此不应使用此方法来执行在进程消失后保留的操作。”因此,我不确定这是否是正确的方法,如果我想始终确定应用程序是否会终止。谢谢。很高兴知道。因此,您可以采取的另一种方法是让后台服务运行以监控应用程序的运行状况。这是在销毁它所在的
活动时运行的。当
活动
正在进行配置更改(例如,正在旋转)时,它也会运行。你可以检查它是在更改配置还是以
isChangingConfigurations()
方法结束:嘿,Anirudh,我尝试了onDestroy(),但当我手动终止应用程序时,没有调用此方法。同样在android文档中,也给出了“在某些情况下,系统会在不调用此方法(或任何其他方法)的情况下简单地终止活动的托管进程,因此不应使用此方法来执行在进程消失后保留的操作。”因此,我不确定这是否是正确的方法,如果我想始终确定应用程序是否会终止。谢谢。很高兴知道。因此,您可以采取的另一种方法是运行后台服务来监控应用程序的运行状况。请同时提供原因和正确的解决方案,而不是完全没有帮助的一行程序。请同时提供原因和正确的解决方案,而不是完全没有帮助的一行程序。