Tag: activity lifecycle

开始活动后立即调用OnPause和OnStop()

我有一个活动,当它启动时需要打开屏幕(如果已closures)。 所以在onCreate,我有: this.getWindow().setFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 在广播接收机的帮助下使用这个function,我可以使我的活动显示每当它从广播接收机启动。 但是问题很奇怪,活动生命周期以这种方式调用onPause()和onResume之后立即开始活动 的onCreate 在onStart 的onResume 在onPause 的onStop 在onStart 的onResume 所以问题是在开始和简历调用两次,停止也调用,我想在onStop()中实现一些逻辑,但与这样的行为应用程序将无法正常工作。 编辑 我发现问题只是由于标志FLAG_SHOW_WHEN_LOCKED。 当设备被locking时。 只有当设备在活动开始之前被locking时才会发生。 PS我使用广播接收器的报警pipe理器,然后从广播接收器开始活动。

为什么实现onDestroy()如果​​不能保证被调用?

根据android Activity Lifecycle,唯一保证被调用的callbackonPause()是onPause() ,如果一个活动处于运行状态(通常是预期的onPause() 。 所以,我必须假定有些场景在实现onStop()和onDestroy()时候是有意义的,尽pipe它们并不真正被调用。 我明白onStop()应该被实现,当一个活动可能通过停止状态返回到运行状态(为什么会这样做,而不是直接返回是一个不同的问题)。 但是,当我可以将所有清理/状态保存到onPause() , onDestroy()的需要对我来说是不清楚的。 你可以描述一个真正的应用程序的情况(即不像驾驶汽车等),其中有意义的实现onDestroy() ?

onResume()之前调用onActivityResult()吗?

下面是我的应用程序的布局: onResume()用户被提示login 如果用户login,他可以继续使用应用程序3.如果用户随时登出,我想再次提示login 我怎样才能做到这一点? 这是我的MainActivity: @Override protected void onResume(){ super.onResume(); isLoggedIn = prefs.getBoolean("isLoggedIn", false); if(!isLoggedIn){ showLoginActivity(); } } 这是我的LoginActivity: @Override protected void onPostExecute(JSONObject json) { String authorized = "200"; String unauthorized = "401"; String notfound = "404"; String status = new String(); try { // Get the messages array JSONObject response = json.getJSONObject("response"); status = […]

什么Activity.finish()方法在做什么?

我正在开发Android应用程序一段时间,并遵循了很多有关活动生命周期和应用程序生命周期的文章。 我知道Activity.finish()方法调用Activity.finish()的方式,并从堆栈中删除活动,我想它指向操作系统和垃圾回收器,他可以“做他的诀窍”和自由记忆,当它发现这是一个好时机这样做…. 我来到这个职位 – 是否放弃了一个应用程序? 并阅读Mark Murphy的回答。 这让我对finish()方法究竟做了什么感到困惑。 有没有机会我打电话finish()和onDestroy()不会被调用?

从历史堆栈中删除一个活动

我的应用程序在用户第一次运行应用程序时显示注册活动,如下所示: ActivitySplashScreen(欢迎游戏,注册一个帐户?) ActivitySplashScreenSignUp(很好,填写这个信息) ActivityGameMain(主游戏画面) 所以当用户点击每个屏幕上的一个按钮时,这些活动正好按照这个顺序启动。 当用户从活动#2转到#3时,是否可以完全清除历史堆栈中的#1和#2? 我喜欢这样,如果用户在#3,并点击后退按钮,他们只是去主屏幕,而不是回到初始屏幕。 我想我可以用任务来完成这个任务(即在#3开始一个新的任务),但想看看是否有更简单的方法, 谢谢