问题标签 [android-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 的最近列表中删除时如何触发事件
我想从最近的列表中删除我的应用程序时重新启动它。我在onDestroy()
方法中添加了重启代码。它在Android 7及更高版本中运行良好。但是在Android 6和更早的版本上,它不起作用。onDestroy()
方法仅在按下后退按钮时调用。
java - How to finish an application when it goes to the background
I need to finish an application when it goes to the background, I'm using method finishAffinity()
but it seems it does not work, someone can tell me another alternative
android - Android - 在 onCreate() 之后调用 onDestroy()
我有一个屏幕保护程序正在运行,一个小动画。当用户触摸屏幕时,他们会移动到我的 MainActivity。为此,我将覆盖方法“onUserInteraction()”。如果您不熟悉,对设备屏幕或按钮的任何物理触摸都会触发此方法。
每次点击屏幕都会让我成功进入主要活动。但是,如果我按下后退按钮或音量按钮,我会收到以下一系列事件。
- onCreate()
- onResume()
- 暂停()
- onCreate()
- onResume()
- onWindowFocusChanged()
- 停止()
- onDestroy()
在 onCreate() 和 onResume() 中,我将布尔值设置为 true。在 onPause() 和 onDestroy() 中,布尔值设置为 false。所以,当最后一次调用 onDestroy() 时,我遇到了一个主要问题。同时,我可以将我的布尔值设置为仅在 onPause() 期间更改,因为每次更改屏幕时都会调用它,但这个问题仍然困扰着我。
在我的 Logcat 中,就在调用 onDestroy() 之前,我看到以下行:
我的清单中的 MainActivity:
我在阅读(某处)时提供了上述内容,更改 onCreate() 内部请求的方向可能会导致我的问题。但是,我正在添加标志:
我真正觉得有趣的是,当调用 onDestroy() 时我完全没有问题。所有按钮、菜单项、计时器、后台服务都可以正常工作。除了“破坏”我的布尔逻辑和“破坏”我剩下的骄傲之外……实际上没有任何影响。这是一个错误吗?
使用 Gradle 4.10.1 运行 Android Studio 3.3.2
提前感谢您的帮助。
编辑(2019 年 3 月 21 日)
回答布尔逻辑问题:只要用户在应用程序的主屏幕上,即“MainActivity”,屏幕上就会出现弹出窗口。我还跟踪我是否在屏幕保护程序活动中 - 弹出请求会将用户移动到主屏幕,然后打开弹出窗口。
在 MainActivity.java
从 MainActivity 移至 ScreenSaver 不是问题,但我在此处添加了代码以防万一。
根据要求,我在日志中添加了“this”。结果如下:
看上面,看起来我们启动了两次 MainActivity。很好的电话@David Wasser。看起来我们离解决这个问题又近了一步。
因为看起来我们要启动 MainActivity 两次,所以我添加了启动 MainActivity 的 ScreenSaver 代码。
我刚刚添加的上述函数中的日志为我们提供了一个有用的提示:
看起来 onUserInteraction() 对 KeyEvent 做出了两次响应。可能是 onKeyDown() 和 onKeyUp()。所以,当然我也记录了这个:
看起来 KeyDown/KeyUp 一定是问题所在 - 对于后退按钮、音量按钮.. 可能还有卡片视图、bixby 和主页按钮,我什至没有想过要测试。
现在,我做了一个简单的解决方法,它可以工作。但是,我觉得应该有一个更优雅的方法。欢迎任何想法。
所以,我猜这个故事的寓意是,同时启动同一个活动两次,可能会导致 onDestroy() 在“幸存”克隆活动创建后被调用。我注意到它的唯一原因是因为我的布尔值更新实际上是在更新单例类中的静态变量,用于后台服务和其他一些类中的弹出管理。否则,它可能会被忽视。
编辑(2019 年 3 月 22 日)
MainActivity 的 Android 清单
屏幕保护程序类,onUserInteraction()
java - 为什么缓存数据不会在应用程序销毁时删除
当我尝试onDestroy()
在 MainActivity 的方法中使用下面的代码时,它接缝它不起作用。我做错了什么?
代码:
android - onDestroyView() 方法有什么问题?
我正在尝试在片段被销毁之前将值保存在我的首选项中,但是一条错误消息说
android.support.v4.app.SuperNotCalledException:片段没有调用到 super.onDestroyView()
这是我的代码
当我评论循环时,一切正常!
android - 如何使用 onPause(后退按钮)发送结果 Intent
我有一个包含 Recycler 视图的 Activity,并使用额外的字符串从主 Activity 调用。然后用户会做一些改变字符串的事情,我想把它发送回主活动。有没有办法只使用手机上的后退按钮来做到这一点?我有结果意图在我的第二个活动的“onPause”方法中设置结果,但主要活动一直说结果被取消。请帮忙!
主要活动代码:
我的第二个活动:
LogCat System.Out:
java - 在读取共享首选项时,仅收到一个对象
我正在尝试将一些Array
对象保存到SharedPreferences
.
它是如何在我的应用程序上运行的:
我有RecyclerView
包含可点击项目。单击这些项目时,它们将被添加到一个新数组中。新数组显示在另一个视图中。我正在尝试将数组添加到SharedPreferences
片段onDestroyView()
的开头。这意味着当我杀死片段时,数组将保存在SharedPreferences
.
现在使用我的代码,在读取数据时,我只从数组中获取最后一个对象,而不是所有对象。
这是我的代码:
将项目添加到另一个视图:
保存到 SP
从 SP 读取
android - onDestroy() not called
I have a service that I start via and return START_REDELIVER_INTENT
so it gets restarted after being killed by Android after a day or so.
But my onDestroy does not seem to get called because I don't see the file updated, while I see timestamps from by debug write to another file within onCreate and onStartCommand methods. What am I missing here?
java - 如何从代码中完全销毁活动?
我正在使用java在android中构建一个药物提醒应用程序。用户可以设置一个或多个提醒,并根据这些提醒将得到通知吃药。
问题是,每当生成通知,并且用户点击它并且接收器活动打开时,都会向用户呈现两种选择,要么吃药,要么跳过它。现在,我已经确保在这两种情况下,活动都将完成并且也调用了它的 onDestroy() 方法。我的目标是防止该活动出现在最近的应用列表中,以便用户不能重复服用或跳过药物。
这是详细信息(如果有任何帮助,链接都指向应用程序的屏幕截图):
通知来了,用户点击通知,提醒接收活动打开
用户服用或跳过药物,活动结束。
但是该活动仍显示在最近的应用程序列表中,如果点击它,它会再次打开提醒接收活动,用户可以再次执行相同的操作
我想防止这种特殊行为发生。
这是我尝试过的事情(我有一个片段,在活动之上运行):
- 从片段完成活动,然后在其上调用 onDestroy()
- 像这样修改活动的 onDestroy() 方法
但是问题依旧,求大神帮忙。
android - 当应用程序在后台运行时,Android 能否在不终止整个进程的情况下终止活动?
我想知道Android系统是否能够在应用程序最小化时在没有整个应用程序进程的情况下终止活动。从 Android 文档中我们知道,onDestroy
只有在 Activity 即将被销毁时才会调用该方法,并且系统保证在即将杀死 Activity 时调用该方法,只有在整个应用程序进程被杀死的情况下才会调用该方法。
所以,想象这样一种情况——你将应用程序发送到后台(最小化),一段时间后操作系统开始内存不足并决定终止活动,但由于应用程序当前被挂起并且无法执行代码它不是能够调用它的onDestroy
方法,尽管可以保证在每次活动销毁之前都会调用它。
所以,这种推理让我想到,当应用程序在后台时,操作系统只能杀死整个进程,而不能杀死某些特定的活动。我的推理是正确的,还是我错过了什么?