onRestart
Activity重新进入前台时调用,时机在onStart之前。
关于页面何时可见
很多文章说onStart时可见,onResume时可交互。我们看下源码的说明:
- onStart:在
onCreate
之后调用;或者是Activity被stop,需要重新展示给用户的时候,在onRestart
后调用。 - onResume:在
onRestoreInstanceState
或者onRestart
或者onPause
之后调用,时Activity能够与用户交互。该方法可以用来启动动画或者开启一些硬件,如相机。BUT,onResume
并不能保证Activity已经对用户可见,一些系统窗口可能还在Activity之前。使用onWindowFocusChanged
方法可以确保Activity对用户可见。
所以,最稳妥的办法是在onWindowFocusChanged
判断页面是否已经可见。
onNewIntent
当Activity启动模式不是标准启动模式,或者启动的Intent带有FLAG_ACTIVITY_SINGLE_TOP
标识,Activity被再次启动时都可能不创建新的实例,而是调用onNewIntent
方法,接收新的Intent。此时的生命周期为:
onNewIntent-->onRestart-->onStart-->onResume
。
需要注意的是,getIntent
方法获取的仍是之前旧的Intent,可以通过setIntent
方法更新Intent。
onUserLeaveHint
在用户操作离开该页面的时候会调用该方法,时机在onPause之前,在onWindowFocusChanged之后。比如用户启动了其他Activity,按了Home键或者back键等等。而当因为来电切换到通话页面时,不会回调该方法。
onAttachFragment
public void onAttachFragment(Fragment fragment) {
}
当有Fragment attach到Activity的时候回调该方法。回调时机在Fragment的onAttach之后,onCreate之前。
做一些监控还是不错的。
onUserInteraction
用户与该Activity交互时回调该方法,包括按键、触控等。可用来实现屏保功能。
setVisible
设置当前页面的DecorView是否可见。需要在onResume之后才能调用,否则会崩溃。
finish相关
public void finish() {
finish(DONT_FINISH_TASK_WITH_ACTIVITY);
}
关闭Activity
public void finishAndRemoveTask() {
finish(FINISH_TASK_WITH_ROOT_ACTIVITY);
}
关闭Activity及任务栈。
public void finishActivity(int requestCode){...}
关闭通过startActivityForResult启动的相同requestCode的Activity。
横竖屏设置
setRequestedOrientation(int)可以设置横屏还是竖屏。
getRequestedOrientation用于获取AndroidManifest.xml文件中定义的android:screenOrientation
的值。
此处需要注意的是,通过getResources().getConfiguration().orientation
获取到的屏幕方向值与getRequestedOrientation
方法的结果有所不同。前者是当前屏幕方向的真实反映。
比如清单文件配置的android:screenOrientation="sensor"
,此时屏幕是竖屏,则:
-
getResources().getConfiguration().orientation
返回Configuration.ORIENTATION_PORTRAIT
, -
getRequestedOrientation
返回ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
getTaskId
返回该Activity所在的任务栈的id。该值在Activity的生命周期中保持不变。
isTaskRoot
判断该Activity是否在任务栈的栈底。
moveTaskToBack
/**
* 将该Activity所在的任务栈放到后台。
* nonRoot: false-只有该Activity位于栈底时执行;true-不管是否位于栈底,都执行该方法。
*/
public boolean moveTaskToBack(boolean nonRoot) {...}
getPreferences
获取已该Activity类名为名称的SharedPreferences。
getLayoutInflater
@NonNull
public LayoutInflater getLayoutInflater() {
return getWindow().getLayoutInflater();
}
网友评论