问题标签 [ondestroy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 活动崩溃后android停止后台服务
一开始,我想为糟糕的英语道歉。
我的问题是:
我在 android 中有一个服务,它在活动运行时在后台运行。(此服务以指定的时间间隔将用户数据与服务器同步)。
并且从 onCreateMethod 中的活动开始。该活动实现 Thread.UncaughtExceptionHandler 并在 onCreate 方法中注册以捕获活动中的所有意外异常。当活动中的某些东西抛出异常方法 uncaughtException 被调用并且服务应该停止时 stopService(serviceIntent); 但是服务中的 onDestoy 没有被调用。但是,当活动中的 onDestroy 方法被调用(用户按下然后返回按钮)时,服务会成功停止并调用 CService 中的 onDestoroy。
当活动崩溃时,我需要停止后台服务。因为当 android 关闭活动并开始堆栈中的前一个活动(即登录屏幕)时,现在没有用户记录。
感谢您的建议。
android - 在活动的 onDestroy 方法中保存数据
我正在编写一个任务列表并拥有一个包含所有任务(和元数据)的 Project 对象。我使用操作日志,因此当任务更改时,我不会立即将其保存到数据库中,只需将其保存在内存中,以便在活动完成时转储到数据库中。Activity 的 onDestroy 方法是最好的地方:如果没有调用 onRetainNonConfigurationInstance 方法,我启动服务来保存项目(一个实例存储在应用程序中)。保存是昂贵的:在数据库项目中有修订,所以我保存新数据,更改当前修订并删除以前修订的数据。所以我不怕突然申请停止。
但是,根据文件我必须do not count on this method being called as a place for saving data.
有没有其他地方可以保存我的数据?
android - 没有调用 Service 的 onDestroy() 方法的情况?
我知道服务的 onDestroy() 方法可能永远不会被调用,但有人可以告诉我什么时候可能会发生这种情况吗?我特别感兴趣的是服务是否有可能被杀死,但它的 VM 会继续运行。
我问是因为我有一个服务,它在服务的 onStartCommand() 方法中注册 ContentObservers 并在 onDestroy() 中取消注册它们。如果服务的 onDestroy() 方法因为整个 VM 被杀死(连同它创建的观察者)而从未被调用,那很好。但我想知道服务是否有可能在不调用 onDestroy() 的情况下“消失”,而它创建的观察者将继续存在并继续接收更改。
android - 调用 OnDestroy 时释放媒体播放器,当按下 backplayer 时强制退出
我有一个应用程序可以在用户浏览几次后播放音频。起初一切正常,除非在播放音频时按下后退按钮,此时应用程序关闭但音频继续。经过研究,我放入了 OnDestroy 方法并释放了现在在音频播放期间按下后退按钮时停止的媒体播放器。
但是,现在当在媒体播放器启动之前的前一个视图中按下后退按钮时,我会收到强制关闭消息,并且 logcat 说无法销毁活动 - 我假设是因为没有媒体播放器可以释放?有谁知道发生了什么?
我只在媒体播放时尝试了对 super.OnDestroy 的 if 语句,但这没有效果。
android - onbackpressed 退出应用程序
我有一个应用程序,它有一个主菜单(MainMenu.java),它在按下菜单按钮时启动一个活动(ActivityBlah):
ActivityBlah.java 不应调用 onDestroy,而应在按下后退按钮时调用 onResume,此按钮也应通向主菜单。
试过这个:
和这个:
..还有一些关于这个网站的建议 - 他们都没有奏效。
1)当 ActivityBlah 处于前台时,只要我按下后退按钮,它就会关闭应用程序并显示手机的主屏幕。在这种情况下,如何确保返回 MainMenu?
2)一旦我在 1)中成功,我如何确保 MainMenu.java 中的 StartActivity 不会“创建”ActivityBlah,而是“恢复”它,因为我会通过按下后退按钮“暂停”它而不是“破坏”它?
android - 按下主页按钮时活动被破坏
在我的应用程序中,当我按下主页按钮时,活动将转到onDestroy()
. 它应该onPause()
只被称为方法吗?
为什么会这样?
android - 完成 onCreate 中的活动时,如何在 onCreate 之前调用我的片段的 onCreateView?
这很奇怪。我有一个简单的应用程序,一旦登录,它就会在活动中显示一个片段。该应用程序还有一个不活动“超时”,在此之后它完成活动并显示登录屏幕 - 如果应用程序在超时发生时处于后台,那么当活动中发生下一个onCreate
或onStart
事件时它就完成了。
但是,有时当返回登录的活动时,我会在我的片段的 onActivityCreated 方法中得到一个 NPE。片段非常简单,只需调用字符串上的方法。字符串本身是通过调用 getArguments() 来检索的。我已经验证,每当创建 Fragment 时,总是会设置参数。
因此,在片段中似乎以某种方式onActivityCreated
实际上调用onCreate
了它,我知道这应该是不可能的。以下是堆栈跟踪的一部分:
android - How to avoid Service to be stopped on configuration change?
Hi and thanks for your help.
I have the following situation.
My Activity is bound to a Service that performs heavy data retrival from internet via an AsyncTask.
Since the Service is heavy I need to make make sure it is stopped when the user navigates away for the Activity, therefore I make sure to stop the service in onDestroy()
.
When configuration changes onDestroy()
is called - and so are onPause()
and onStop()
- and subsequently the Service is stopped by onDestroy()
.
The point is that I do not want the Service tho stop on configuration change.
Please any suggestion very much appreciated!
And thanks for your help!
android - 在 onDestroy 中进行所有清理是否安全?
更具体地说:在 onDestroy 中取消任务是否安全?此外,使用 onDestroy 注销接收器和释放资源是否安全?
我的目标是确保我的任务在 Activity 被销毁时被取消/销毁,但不是在此之前。
销毁():
- 当活动被销毁并且必须释放资源时调用。
- 当活动被匆忙销毁时(当系统资源不足时等)时不会调用。
第一种情况很清楚:我在 onDestroy 中进行了所有清理,没有出现任何问题。第二种情况虽然有点问题。当 Activity 被销毁并跳过 onDestroy(所以我不会取消我的任务)时,是否会发生任务继续执行,然后完成并尝试更新死 Activity,因此应用程序崩溃?
我们来到了真正的问题:
- 当一个 Activity 被杀死并跳过 onDestroy 时,附加到该 Activity 的所有东西都会自动销毁吗?(只有在一切都被彻底清除的情况下才跳过 onDestroy ?任务、注册的接收者等)
- 如果跳过 onDestroy 是否意味着整个应用程序被杀死?
让我们关注 onDestroy(),因为解决方案不在 onPause() 或 onStop() 中。论据:
- onStop() 可以在 Activity 被销毁时跳过,就像 onDestroy
- onPause 调用太早且太频繁,因此不适合用例。例子:
屏幕锁定:设备屏幕锁定时可以调用onPause 。很多时候,这就像屏幕保护程序一样发生,用户会立即解锁,因为他站在那里看着屏幕。在这种情况下取消任务并停止我的应用程序正在执行的所有操作只会降低用户体验。我不希望我的应用程序仅仅因为偶然的“屏幕保护程序”而窒息和行为不端。
在示例应用程序中,我有两个屏幕是活动。用户可以在它们之间快速切换。在这个应用程序中,用户倾向于经常快速地切换屏幕。
导航:其中一个屏幕有一张地图,可以从系统接收位置更新。它记录了位置(路线)变化的精确图形日志,因此它需要不断运行,直到 Activity 关闭。通常我会在 onResume 和 onPause 中注册和取消注册任何接收器。但是,这会使应用程序非常不可用,因为每次用户导航离开时地图上的更新都会停止。因此,我想在 onDestroy 中注销接收器。
加载列表:第二个屏幕有一个列表,显示来自网络服务的数据。下载数据需要 4 秒。我使用 AsyncTask 并且我知道我应该在必要时取消。它不应该在 onPause 中取消,因为它应该在用户在屏幕之间切换时继续加载。因此,我想在 onDestroy 中取消它。
可以有更多的例子。在每个人看来,其中一些可能并不完全合适(您甚至可能建议使用服务而不是 AsyncTask)。但是这个想法很重要,他们都有一个相同的想法:继续做特定于 Activity 的工作,而 Activity暂停,但确保在 Activity 被销毁时停止做。(无论我使用的是 AsyncTask 还是 Service,都没有关系。无论哪种情况,都应该在 Activity 被销毁时停止工作。)
PS 如果答案是在 onDestroy 中进行清理是不安全的,这意味着 Android 框架要求我们停止我们在 onPause 中所做的一切。然后我看不到任何使用 onDestroy 的理由......
android - Android检测应用程序何时更新
我正在开发一个 android 应用程序,当用户进行市场更新时我需要保存数据。实际上在更新开始之前。我尝试使用 onDestroy() 但更新应用程序时不会调用它。你有什么想法?
问题是该应用程序定期保存数据。有时会发生这种情况,当您选择更新时,它会尝试在同一时间保存文件,导致数据损坏......这就是我试图检测更新事件的原因。
使用计划线程(例如 60 秒)以固定间隔保存文件。同样在文件中,我使用经典的 writeObject() 保存了一个序列化对象。这仅以 60 秒的固定速率发生,并且也在活动的 onPause 或服务的 onDestroy() 上发生。
但是,如果固定速率保存恰好在更新时发生(这会导致应用程序被破坏),则保存不完整并且对象会损坏,从而导致下次启动应用程序时从保存文件中获取无效对象。