Android activity生命周期的几种场景

onWindowFocusChanged

CSDN

程序真的可见时,会调用onWindowFocusChanged,从这时候起,用户可以与应用程序进行交互了。
下面的测试是以Android 5.1.1,坚果手机为例,不同的版本,不同的定制系统可能略有不同。

这是一个Activity从进入到退出的过程。

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. com.yan.legacy.MainActivity: onWindowFocusChanged
  8. com.yan.legacy.MainActivity: onPause
  9. com.yan.legacy.MainActivity: onStop
  10. com.yan.legacy.MainActivity: onDestroy

这是一个Activity从进入到进入下一个activity到返回自身的过程

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. 点击一个按钮进入下一个activity
  8. com.yan.legacy.MainActivity: onPause
  9. com.yan.legacy.MainActivity: onWindowFocusChanged
  10. com.yan.legacy.MainActivity: onStop
  11. 返回自身
  12. com.yan.legacy.MainActivity: onRestart
  13. com.yan.legacy.MainActivity: onStart
  14. com.yan.legacy.MainActivity: onResume
  15. com.yan.legacy.MainActivity: onWindowFocusChanged

下面是一个activity从进入到锁屏经历的声明周期

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. 锁屏
  8. com.yan.legacy.MainActivity: onPause
  9. com.yan.legacy.MainActivity: onStop
  10. com.yan.legacy.MainActivity: onWindowFocusChanged
  11. 开锁
  12. com.yan.legacy.MainActivity: onRestart
  13. com.yan.legacy.MainActivity: onStart
  14. com.yan.legacy.MainActivity: onResume
  15. com.yan.legacy.MainActivity: onWindowFocusChanged

下面是一个activity从进入到按Home退回桌面,然后再进入的过程

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. 按Home
  8. com.yan.legacy.MainActivity: onPause
  9. com.yan.legacy.MainActivity: onWindowFocusChanged
  10. com.yan.legacy.MainActivity: onStop
  11. 再次进入
  12. com.yan.legacy.MainActivity: onRestart
  13. com.yan.legacy.MainActivity: onStart
  14. com.yan.legacy.MainActivity: onResume
  15. com.yan.legacy.MainActivity: onWindowFocusChanged

与进入下一个activity相同,与锁屏唯一不同的是onWindowFocusChanged,可能是因为桌面更早的获得了焦点。

弹出一个Dialog,Activity仍可见时如下

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. 弹窗出来
  8. com.yan.legacy.MainActivity: onWindowFocusChanged

下面是一个activity从进入到弹出一个Theme为Dialog的Activity时的过程

  1. com.yan.legacy.MainActivity: onCreate
  2. com.yan.legacy.MainActivity: onStart
  3. com.yan.legacy.MainActivity: onResume
  4. com.yan.legacy.MainActivity: attachedToWindow
  5. com.yan.legacy.MainActivity: onWindowFocusChanged
  6. 程序运行
  7. 弹出Dialog样式的Activity
  8. com.yan.legacy.MainActivity: onPause
  9. com.yan.legacy.MainActivity: onWindowFocusChanged
  10. 返回
  11. com.yan.legacy.MainActivity: onResume
  12. com.yan.legacy.MainActivity: onWindowFocusChanged
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Android上重启一个Activity,可以使用 Intent 和 finish() 方法。 例如: ``` Intent intent = new Intent(CurrentActivity.this, CurrentActivity.class); finish(); startActivity(intent); ``` 首先,创建一个新的 Intent 对象,并将当前 Activity 作为上下文传入。 然后调用 finish() 方法结束当前 Activity,最后调用 startActivity(intent) 方法重新启动该 Activity。 ### 回答2: 在Android中,可以通过以下几种方式来重启Activity。 1. 使用Intent重新启动Activity:可以通过创建一个新的Intent对象,并将原Activity的类名和其他需要传递的数据传递给新的Intent,然后调用startActivity()方法来启动新的Activity,并使用finish()方法来销毁原Activity。 2. 使用FLAG_ACTIVITY_CLEAR_TOP标志重新启动Activity:可以在Intent中设置FLAG_ACTIVITY_CLEAR_TOP标志,然后调用startActivity()方法来启动新的Activity。这个标志会检查Activity的任务栈,如果需要启动的Activity已经在任务栈中存在,那么会将该Activity之上的所有Activity都销毁掉,然后重用已存在的Activity,并将其置于栈顶。 3. 使用Recreate()方法重启Activity:在Android 3.0及以上版本中,可以通过调用Activity的recreate()方法来重启Activity。这个方法会销毁当前的Activity,然后重新创建一个新的Activity,并将其置于栈顶。 需要注意的是,以上这些方法都会导致Activity生命周期方法被重新调用,如onCreate()、onStart()、onResume()等,所以在处理重启逻辑时,需要注意保存和恢复Activity的状态。 另外,可以根据具体的需求选择合适的重启方式,如是否需要传递数据、是否需要清空任务栈等。根据不同场景,选择合适的方法可以更好地实现Activity的重启功能。 ### 回答3: 在Android中,我们可以通过调用`startActivity()`方法来启动一个新的Activity。当我们希望重新启动当前Activity时,有以下几种常见的方法。 1. 使用`Intent.FLAG_ACTIVITY_CLEAR_TOP`标志: 通过在启动新Activity时设置`Intent.FLAG_ACTIVITY_CLEAR_TOP`标志,我们可以清除当前Activity之上的所有Activity。这样,在新的Activity启动后,原来的Activity会被销毁并被新的Activity覆盖。代码如下: ```java Intent intent = new Intent(this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); ``` 2. 使用`Intent.FLAG_ACTIVITY_NEW_TASK`标志: 通过在启动新的Activity时设置`Intent.FLAG_ACTIVITY_NEW_TASK`标志,我们可以在新的任务栈中启动新的Activity。这样,原来的Activity会被销毁,并且返回到主界面,而新的Activity将会在新的任务栈中启动。代码如下: ```java Intent intent = new Intent(this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); ``` 3. 通过重新启动Activity: 通过重新调用`onCreate()`方法和`onStart()`方法,我们可以重新启动当前Activity。代码如下: ```java Intent intent = getIntent(); finish(); startActivity(intent); ``` 以上是三种常见的Android重启Activity的方法,开发者可以根据具体的需求选择合适的方法来实现重启。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值