Activity值得注意的一些方法

2018-07-09  本文已影响29人  sollian
activity_lifecycle.png

onRestart

Activity重新进入前台时调用,时机在onStart之前。

关于页面何时可见

很多文章说onStart时可见,onResume时可交互。我们看下源码的说明:

所以,最稳妥的办法是在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",此时屏幕是竖屏,则:

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();
    }
上一篇下一篇

猜你喜欢

热点阅读