Articles of ondestroy

Android服务onCreate被多次调用而不调用onDestroy

在我的应用程序中,我使用服务与我们的服务器进行通信。 该服务生成多个消息队列线程来处理具有不同优先级的任务。 这个模型已经使用了大约一年没有大问题。 但是,最近,我发现我的服务类的onCreate被多次调用了一段时间。 在两个onCreate调用之间永远不会调用onDestroy 。 因此,我没有机会杀死现有的线程。 一旦发生此行为,服务内部就会出现重复的线程。 我唯一改变的是运行服务,因为前台服务是用户登录应用程序。 我想知道前台服务是否会导致问题。 有任何想法吗?

Android后退按钮行为

假设我们有一个带默认行为的默认空活动,使用默认意图标志启动。 用户按下设备上的后退按钮。 活动消失了……但实际上怎么样? 按下按钮的行为方式与finish()相同吗? 活动是否立即被破坏( onDestroy被称为)? 活动是否保证被销毁,但不能立即销毁? 是否有可能不会销毁活动,并且在将来启动此活动时将重复使用此实例? (所以只onStart onPause和onStop – > onStart和onResume ?) 我正在寻找一个可靠的答案,所以如果你不确定这里发生了什么,请不要回答。

android有什么视图回调,当它被销毁?

我有一个自定义视图组件。 我在片段或活动中使用它。 我想知道当它从片段/活动中被销毁时是否有回调?

Android:当我从最近的应用按钮关闭应用时,不会调用OnDestroy

当我们按下这个按钮 我们看到我们没有关闭的应用程序,就像这样 但是当我们想要从这个屏幕关闭一个应用程序(图片下方)时,不会调用onDestroy()方法,但应用程序已关闭。 当应用程序以这种方式关闭时,我需要调用onDestroy()。 我怎样才能做到这一点?

在onDestroy中进行所有清理是否安全?

更具体地说:在onDestroy中取消任务是否安全? 此外,使用onDestroy来取消注册接收器和释放资源是否安全? 我的目标是确保在活动被销毁时取消/销毁我的任务,但不是之前。 的onDestroy(): 在活动被销毁并且必须释放资源时调用。 当活动被匆忙销毁时(系统资源不足等),不会调用它。 第一个案例很清楚:我在onDestroy上做了所有的清理,没有出现任何问题。 第二种情况虽然有点问题。 当Activity被销毁并且onDestroy被跳过时(所以我不取消我的任务),是否会发生任务继续执行,然后完成并尝试更新死活动,以便应用程序崩溃? 我们来到真正的问题: 当一个Activity被杀死并且跳过onDestroy时,附加到该Activity的所有东西都会被自动销毁吗? ( 只有在一切都将被彻底清除的情况下才会跳过onDestroy吗?任务,注册接收器等) 如果跳过onDestroy这是否意味着整个应用程序被杀死? 让我们关注onDestroy(),因为解决方案不在onPause()或onStop()中。 参数: 可以在销毁Activity时跳过onStop(),就像onDestroy一样 onPause被调用得太早且太频繁,所以它不适合用例。 例子: 屏幕锁定 :设备屏幕锁定时可以调用onPause。 这通常就像屏幕保护程序一样,用户立即解锁,因为他站在那里看着屏幕。 取消任务并停止我的应用在这种情况下所做的一切只会降低用户体验。 我不希望我的应用程序因为偶然的“屏幕保护程序”而窒息而行为不端。 在示例应用程序中,我有两个活动屏幕。 用户可以在它们之间快速切换。 在这个应用程序中,用户倾向于经常快速地切换屏幕。 导航 :其中一个屏幕有一个地图,可从系统接收位置更新。 它记录了位置(路径)变化的精确图形日志,因此需要不断运行,直到活动关闭。 通常我会在onResume和onPause中注册和注销任何接收器。 但是,这会使应用程序非常不可用,因为每次用户导航时地图上的更新都会停止。 因此,我想取消注册onDestroy中的接收器。 加载列表 :第二个屏幕有一个列表,显示来自Web服务的数据。 下载数据需要4秒钟。 我使用AsyncTask,我知道我应该在必要时取消。 它不应该在onPause中取消,因为它应该在用户在屏幕之间切换时继续加载。 因此,我想在onDestroy中取消它。 可以有更多的例子。 其中一些可能并不完全适合每个人(您甚至可能建议使用服务而不是AsyncTask)。 但这个想法很重要,所有人都有相同的想法 :继续做一些特定于Activity的工作,而Activity 暂停 ,但是当活动被销毁时,ENSURE要停止这样做。 (无论我使用的是AsyncTask还是Service,都无关紧要。在任何一种情况下,都应该在Activity被销毁时停止工作。) PS如果答案是在onDestroy中进行清理是不安全的 ,这意味着Android框架要求我们停止在onPause中执行的所有操作。 然后我就没有看到使用onDestroy的任何理由……

onDestroy(),同时“等待”onActivityResult()

我有一个有两个活动的应用程序:“A”和“B”。 “A”使用startActivityForResult()生成“B”,即它等待“B”。 现在,假设“B”在前景中。 Android系统可以破坏活动“A”而不会破坏“B”吗? (如果是,那么当“B”完成时,例如在用户输入之后,必须重新创建活动“A”并由Android系统再次放到前台,我需要记住并将“A”恢复到其早期的UI状态。 ) 请注意,我不是在谈论进程终止 (这是不同的情况:如果进程被终止,所有活动都被终止,并且onDestroy()未被调用或无法保证被调用)。 问题仅仅是在等待子活动的结果时是否可以使用onDestroy()。

Android在方向更改时保存状态

我有一个Android应用程序,它维护有关行进距离,时间流逝等的状态。这个状态我可以方便地存储在一个对象中,并在用户更改屏幕时Android调用onDestroy()时在Bundle中存储对该对象的引用方向,然后恢复onCreate(Bundle savedBundle)中的状态。 但是,我在屏幕上的Buttons和EditText对象中也有一些状态,我希望通过屏幕方向保持这种状态。 例如,在onStart(Bundle savedBundle)中我调用: _timerButton.setBackgroundColor(Color.GREEN); _pauseButton.setBackgroundColor(Color.YELLOW); _pauseButton.setEnabled(false); 然后在我的应用程序的整个操作过程中,这些按钮的颜色/启用状态将被更改。 是否有更方便的方法来持久保存用户界面项(EditText,Button对象等)的状态,而无需手动保存/恢复每个按钮的每个属性? 在屏幕方向之间手动管理这种types的状态感觉非常笨拙。 谢谢你的帮助。

Android应用在被杀时不会调用“onDestroy()”(ICS)

我正在开发一个使用蓝牙通信的Android应用程序(使用一个propetary协议),我需要抓住应用程序被杀的那一刻。 我想使用“onDestroy()”方法,但每次应用程序被杀死时都不会调用它。 我注意到,当我按下后退按钮时会调用它,有时只有在我从任务管理器中删除应用程序时才会调用它。 问题是:我怎样才能抓住应用程序被杀之前的那一刻? 这是我尝试使用的代码: @Override public void onDestroy() { sendMessage(msg); Log.d(“SampleApp”, “destroy”); super.onDestroy(); } @Override public void finish(){ sendMessage(msg); Log.d(“SampleApp”, “finish”); super.finish(); } 不幸的是,每次从任务管理器关闭应用程序时都不会调用finish()并且不会调用onDestroy。 我怎么处理这个?

Android Activity onDestroy()并不总是被调用,如果被调用,则只执行部分代码

并不总是调用onDestroy()。 如果被调用,则只执行部分代码。 而且大部分时间在LogCat中我只看到消息“首先调用destroy的gps状态”。 这是为什么? protected void onDestroy(){ super.onDestroy(); Log.d(“on destroy called”, “gps state on destroy called first”); editor.putBoolean(“gpsOn”, false); Log.d(“on destroy called”, “gps state on destroy called second”); editor.commit(); Log.d(“on destroy called”, “gps state on destroy called third”); stopRouteTracking(); Log.d(“on destroy called”, “gps state on destroy called fourth”); }

如何区分是否将onDestroy()作为配置更改序列的一部分进行调用?

在我的Activity中,需要在onDestroy()中销毁一些外部事物(服务)。 但是当配置发生变化时(例如键盘翻转),我不希望这样,因为它会立即恢复。 所以问题是:如何区分onDestroy()是否是由Back-key press或部分配置更改过程引起的? 在@ CommonsWare的回答之后它会非常简单)类似于: @Override onDestroy() { if (mIsChangeConfig == true) { mIsChangeConfig = false: } else { stopService(); } } @Override onRetainNonConfigurationInstance() { mIsChangeConfig = true; }