美文网首页
Activity值得注意的一些方法

Activity值得注意的一些方法

作者: sollian | 来源:发表于2018-07-09 18:13 被阅读29次
    activity_lifecycle.png

    onRestart

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

    关于页面何时可见

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

    • onStart:在onCreate之后调用;或者是Activity被stop,需要重新展示给用户的时候,在onRestart后调用。
    • onResume:在onRestoreInstanceState或者onRestart或者onPause之后调用,时Activity能够与用户交互。该方法可以用来启动动画或者开启一些硬件,如相机。BUTonResume并不能保证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();
        }
    

    相关文章

      网友评论

          本文标题:Activity值得注意的一些方法

          本文链接:https://www.haomeiwen.com/subject/tsipuftx.html