zoukankan      html  css  js  c++  java
  • Activity常用的方法

    Activity,安卓四大基本组件之一,相当于windows的窗口

    作用:界面呈现,用户交互

    Activity生命周期图 
    Activity生命周期图

    虽然上图已经说明得很清楚了,但还是说一下吧!

    Activity在内存中是以栈的形式被管理的,启动一个新的Activity会压入栈顶,旧的Activity就会进入onPause状态,如果此时按返回键就会返回旧的Activity并调用其onResume()方法,被弹出栈顶的新activity自然一步一步走向shut down。

    上面是第一个循环,接下来onStop()->onRestart() 
    同样启动一个新的Activity会压入栈顶,旧的Activity就会进入onPause状态,如果栈顶的Activity背景是透明的(如Dialog),则旧Activity属于可见不会进入onStop()。如果旧Activty处于不可见状态一段时间,就会进入onStop(),此时点击返回键就会回到onStart()

    接下来最后一个循环,如果应用正在运行时(处于界面Activity1),启动了另外一个应用,并且此时系统内存紧张,可能会结束上个应用的进程释放资源,如果此时再返回键回到上个应用,系统会重新启动应用并尝试恢复Activity1的界面


    接下来讲Activity常用的一些方法

    1、现场保护onSaveInstanceState(Bundle)/现场恢复onCreate(Bundle)或onRestoreInstanceState(Bundle) 
    使用过Intent在不同界面跳转传值就知道Bundle怎么用了,这里不说这个。 
    上面说过,当系统将之前的应用进程杀死后重回之前的应用,会恢复界面(onCreate/onRestoreInstanceState方法参数即是要恢复的数据),安卓的一些控件如textview之类的本身就会在onSaveInstanceState调用时保存一些值,比如说当前的字体颜色,尺寸等等

    问题1:onSaveInstanceState什么时候被调用 
    答: 
    在onStop之前一定会调用,不保证一定在onResume之前(例外情况:比如返回键返回上个Activity,则原先的Activity是不会调用这个方法的,因为该Activity已经注定要回收,而onSaveInstanceState只适合保存一些瞬时数据,需要持久化存储的在onPause使用数据库或者本地文件存储,不要偷懒)

    也可以说系统不知道Activity被压入栈顶下方时会不会被回收的情况下,就会先一步调用onSaveInstanceState以免Activty被回收了

    • 例 
      1、跳转到新的Activity,旧Activity就会保存 
      2、关闭屏幕 
      3、去到其他应用程序界面 
      4、Activity横竖屏切换(默认会回收并重新创建Activity)

    问题2:onCreate(Bundle)/onRestoreInstanceState(Bundle)什么时候被调用? 
    答:Activity确实被回收了,并通过返回键尝试返回已回收的Activity时 
    也就是说如果Activity并没有被回收,这时候返回是不会调用这些方法的。

    2、finish()结束Activity 
    onDestroy是系统调用,我们最好不要去手动调用他,要结束一个Acticity使用Finish方法

    3、runOnUiThread 在主线程运行一个任务 
    通常用于Activity中的子线程想更新界面时

    4、overridePendingTransition Activity跳转时动画 
    在startActivity或finish前设置好跳转动画,就可以改变Activity切换时的动画效果

    5、onBackPressed 返回键事件 
    Activity返回键按下时的响应方法,默认是结束Activity

    6、onActivityResult上个Activity返回信息时 
    通过startActivityForResult启动一个新的Activity,新Activity通过setResult方法设置返回结果后返回Activity时就会调用此方法,用于处理 不同界面的返回结果及参数

    7、Activity全屏无标题效果 
    Java
    //设置全屏 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    //设置无标题 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    xml: 
    //直接使用一个全屏无标题的主题 
    Android:theme=”@android:style/Theme.NoTitleBar.Fullscreen” 
    //或者使用一个主题设置为全屏无标题

    <style name="AppTheme" parent="android:Theme.Holo">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
            <item name="windowFullscreen">true</item>
            <item name="windowContentOverlay">@null</item>
    </style>

    8、Activity启动模式(配置文件LuanchMode属性)

      • standard 
        标准启动,启动一个新的activity压入栈中(默认)
      • singleTop 
        如果activity处于栈顶,直接打开activity,如果不处于栈顶则实例化一个新的activity压入栈中
      • singleTask 
        如果存在activity弹出activity上的所有栈显示acitivity,如果不存在则新建
      • singleInstance 
        两个应用都要调到activity,如果发现另一个应用存在activity栈则共享不新建
  • 相关阅读:
    【学习】reactjs(一)——使用npm创建react项目并整合elementUI
    【学习】整合springboot2.0 和 mybatis,实现基本的CRUD
    macos monterey 系统升级后 go build 错误
    [R语言]关联规则2---考虑items之间严格的时序关系
    [R语言]关联规则1---不考虑items之间的时序关系
    [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
    [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
    [机器学习笔记]主成分分析PCA简介及其python实现
    [游戏数据分析]WAU模型简介及WAU预测
    [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
  • 原文地址:https://www.cnblogs.com/zhousha929-/p/6866689.html
Copyright © 2011-2022 走看看