问题标签 [activity-lifecycle]
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 - onPause 中的 ANR keyDispatchingTimedOut
我有一个应用程序,允许用户在一个特定的活动屏幕上输入大量数据。如果用户出于某种原因突然离开此屏幕,我会将他们的数据保存到应用程序的 SQLite 数据库中。这个应用程序已经发布了将近 2 年,从未遇到过 ANR 超时,但在上个月我收到了 2 份市场报告。
在一种情况下,尝试关闭数据库时出现问题。在另一种情况下,尝试打开数据库时出现问题。我根本无法重现该问题,但我看到了正在执行的步骤的确切顺序,但我的问题是我不知道我可能会改变什么。两者都围绕保护数据库的互斥锁我自己不创建互斥锁,这是一个系统问题。
基本上,调用 onPause,打开数据库,将数据写入文件,然后关闭数据库。据我了解,如果您的数据不能仅存储在 SharedPreferences 中(我的数据不能存储),这是正确的处理方式。
我不明白为什么打开或关闭数据库需要这么长时间,那么我在这里有什么选择?我唯一的假设是这些问题是由使用该应用程序很长时间的用户引起的,因此他们的数据库文件变得非常大,并且可能会使系统锁定数据库文件的时间更长(我是只是在这里猜测)。
我想也许从 onPause 开始一个 AsyncTask,但这似乎是错误的。有什么建议么?
android - Android 操作系统会在重新加载时杀死根活动,并尝试重新加载根和顶级活动。有没有办法阻止这种行为?
我的应用程序长期存在问题并且无法解决。我的应用由多个通过 StartActivityForResult 相互调用的活动组成。然后他们等待响应并采取相应的行动。这在正常情况下工作正常。我在清单中有以下设置:
当 Android 操作系统决定终止我的应用程序中的活动时,它似乎想要终止根活动。我看到这样的日志条目:
此时似乎关闭了根活动以及我正在运行的应用程序和服务。
然后,当我通过再次启动它(或从按住主页按钮中选择)返回应用程序时,我会收到一条强制退出消息。日志是这样写的:
问题是这是根活动的子活动,也是最后一个可见活动。它不再有效,因为它从根活动中打开的数据库生成数组适配器,并且由于刚刚重新启动,因此此时没有打开数据库。虽然我确实将数据库和记录保存在 OnSaveInstanceState 中,所以什么都不会丢失,但我无法重新打开数据库并恢复位置,因为数据库使用加密,并且出于安全原因从不存储或缓存密钥。在这种情况下,我只想返回根活动。
I would like to know if there is a way to have my app relaunch completely when it's restarted after being killed, and not try to restore any activities. I know that there are launchmodes I can set to always return to the root if the user switches out and back, but it's not an option in this case. I just want the app to be completely killed when the root activity is killed!
Thanks in advance for any advice.
android - 活动生命周期
我试图了解一个活动的完整生命周期。
所以我在谷歌上搜索了很多关于活动生命周期的教程,但是在所有教程中我都没有在生命周期图中找到这些方法:
1. OnContentChanged()
2. OnPostCreate()
3. OnPostResume()
4. OnWindowfocusChanged()
5. OnuserLeaveHint()
6. OnUserInteraction()
7.OnDetachedFromWindow()
我想知道为什么这些方法不包含在 android 文档的活动生命周期图中。
还有一个问题:
当第一次创建活动时,系统调用该OnContentChanged()
方法作为第一个方法,系统的最后一次调用是OnDetachedFromWindow()
活动被杀死时的方法,但是android文档说活动的整个生命周期发生在OnCreate()
和之间OnDestroy()
?
android - View 什么时候获得它的边界?
我有一个主要Activity
的TextView
。我需要在应用程序启动时执行一些操作。这些动作使用TextView
' 界限。
我尝试了 overrideonCreate()
和方法onStart()
,onResume()
但TextView
' 的界限总是(0,0)。
如何在TextView
获得其大小时捕捉瞬间?
谢谢大家!
android - Android应用生命周期混乱
我有一个重复使用 Activity 次数未知的应用程序。它运行
a> b1||c1 > b2|| c2 > ...
如果我去 a > b1 > b2 > b1,我的应用程序仍然在屏幕上显示 b1 列表,但如果我点击它,它会将我带到相应的 b2 活动。我用来保存 b 数据的 arrayList 需要为 b 的正确实例恢复。
我一直在阅读http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 但我不认为 onPause 和 onResume 会起作用,因为我再次使用相同的活动。
android - startActivityForResult 启动退出应用程序的第二个活动
设想
活动 A(登录)启动活动 B 然后完成();
活动 B 调用 startActivityForResult(Activity C)
活动 C 运行良好,然后在选择电话号码后退出(应该如此)
-- 返回桌面(应用停止)!
为什么没有回到Activity B的onActivityResult()?
笔记
我在活动 B 上创建了正确的 onActivityResult()。
我已经搜索并阅读了有关 startActivityForResult 的 stackoverflow 上的每一条数据。
代码单
启动活动 B 的代码:
启动活动 C 的代码:
代码整理Activity C:
日志
java - Android - 多个活动重启的并发问题
在模拟器(ADT v17.0.0)或设备(原始 Droid)上进行方向更改时,我注意到活动有时会经历多个创建-销毁周期。我发现这篇博客文章提到了这个问题,但没有提供解决方案。
我的应用程序(API 8)当前在 onPause 中“最后一次”保存用户数据,并在 onCreate/onStart 中检索该数据,这对于单次重启工作正常,但如果周期恢复,则会出现并发问题-背部。特别是如果在保存完成之前开始加载,“最后机会”数据就会丢失。
我确实阅读了更快的屏幕方向更改 Android 开发者文章,其中提到通过 onRetainNonConfigurationInstance/getLastNonConfigurationInstance 传输对象。我尝试使用 onRetain/getLast... 像一个标志来判断活动是否正在“重新启动”,这很有效,但我仍然有一个主要问题是不知道任何现有的保存/加载操作是否/何时完成。
并发和线程管理不是我最擅长的,所以我正在寻找一种解决方案,它可以在任意数量的背靠背重启中至少进行一次保存和加载,而不会出现内存泄漏。由于非方向原因可能会发生快速创建-销毁周期,因此仅涉及破坏/处理方向更改的想法并不是我真正想要的。
这是一个带有一些周期的日志文件摘录,您可以看到从横向到纵向时活动在哪里被创建-销毁两次。这是我现在得到的摘录:
android - android中Activity重新创建和进程重新创建之间的区别
我一直试图弄清楚这一点,但我现在似乎陷入了困境。基本上,我试图了解 Activity 何时被销毁和重新创建与它运行的进程何时被销毁和重新创建之间的区别。
根据此处的图表:http: //developer.android.com/reference/android/app/Activity.html,似乎只有在重新创建底层应用程序进程时才重新创建活动。
但是,假设我用一个按钮创建了一个简单的程序:
现在,当我单击按钮时,它将显示数字 15、16、17...。但是,如果我离开程序并转到主菜单并重新进入它,或者我更改屏幕方向,那么它会重新设置为 15。所以必须重新创建 Activity。
但是,程序一直在运行(正如您在任务管理器中看到的那样),因此该进程没有被破坏。
同样,如果我将变量 test 更改为静态变量,那么尽管 Activity 被销毁并重新创建,它仍会保留其值。所以流程必须与Activity不同。
根据 Android Activity 网站上的图表,只有当底层进程的内存太少时才会重新创建 Activity,但这里似乎在许多其他场景中重新创建它 - 例如屏幕方向,转到主菜单等
所以我的问题是:Activity 生命周期和底层 Process 生命周期有什么区别?是否存在 Android 图表中未描述的 Activity 重新创建路径,它保留了底层进程?
非常感谢您对这个问题的任何帮助!
android - 如何关闭关闭后仍在后台运行的应用程序
我的应用程序运行正常,当我进行一些新活动时,我将代码用作
然后当我必须回到之前的活动时,我使用了以下代码
我认为通过这种方式,活动的堆栈可能会很清晰。在单击按钮或电话后退按钮时,我使用了以下代码
但我的应用程序仍在后台运行。我还使用了该android:noHistory="true"
应用程序从后台被杀死,但消息显示该应用程序强制关闭。简单finish();
移动到最后一个活动。我还看到了Quitting an application 的链接 - 这是不受欢迎的吗?但我是新人,所以没有得到太多。请建议我如何处理这个问题。
android - 在强制关闭的情况下停止android服务
在我的 android 应用程序中,它在后台运行一个服务。它是一个媒体播放器应用程序。只要按下播放按钮,服务就会启动,而当用户按下停止按钮或正常关闭应用程序时,服务就会停止。实际上,我在关闭前台活动之前调用了 stopService() 方法。我需要在屏幕旋转期间保持服务处于活动状态。所以,我不会在前台活动的 onDestroy() 方法中停止服务。但我确实注意到,如果由于某种原因发生强制关闭,服务不会停止。
现在,在强制关闭的情况下如何停止服务?是否有任何特定的侦听器允许在强制关闭除 onDestroy() 之外的活动之前完成最后的工作?