Activity常用的方法

Posted Objiect

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity常用的方法相关的知识,希望对你有一定的参考价值。

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

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

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栈则共享不新建






























以上是关于Activity常用的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android片段和依赖注入

从 ViewPager Activity 访问 Fragment 的方法

有没有办法从我的 Dialog 片段中的 Activity 调用方法?

将公共属性和方法公开给 Main Activity 的片段是不是是一种不好的形式?

常用python日期日志获取内容循环的代码片段

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段