文档章节

生命周期

mutouzhang
 mutouzhang
发布于 2014/03/09 22:49
字数 1063
阅读 47
收藏 0

图1:Activity生命周期的简化图,就像一个阶梯金字塔。这图像表明每个状态中是怎么样使用回调函数使得恢复状态回到顶端,或者降低状态到达底部。Activity可以从Paused状态和stopped状态恢复到Resumed状态。
根据你的Activity的复杂程度,你可能不需要使用全部的生命周期函数。然而,去认识每一个周期函数并使用它们去保证满足用户的期望是非常重要的。正确使用你的Activity生命周期函数去保障应用程序的良好表现,必须注意很多方面,包括下面的内容:

  • 当用户接听电话或者转去另外一个应用程序时,不要让程序崩溃。

  • 当用户没有激活使用它时,不消耗宝贵的系统资源。

  • 当用户离开你的应用程序并在稍后的时间返回,不会丢失用户的进度。

  • 当用户屏幕在横向与纵向旋转切换时,不会崩溃或者丢失用户进度。

    你将会在下一课中学到,在很多种情况下,activity都会经历 图1中所示的各种不同状态的转变。然而,这其中只有3种状态是静态的。这意味着,activity 只能在这3种状态之一中存在一段时间:
    Resumed状态

  • 在这种状态下,该Activity在前台运行,用户可以与它进行交互。(有时也简称为“running”状态。)

Paused状态

  • 在这种状态下,该Activity被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码。

Stopped状态

  • 在这种状态下,该活动是完全隐藏,不可见的,可视为存在于后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。

其他的状态(**created状态**和**started状态**)都是非常短暂而且系统通过调用函数使得非常快地转到下一状态。换句话说,当系统调用了onCreated()之后,非常快地就调用了onStart()方法使得进入下一状态,而又马上调用了onResumed又进入了下一状态。

你必须在onCreate()方法中操作一些在整个生命周期内只会调用一次的程序启动逻辑内容。例如,可以在onCreate()方法中定义用户界面的或者初始化一些类变量的内容。

例如,以下的代码向你展示在onCreate()方法中执行活动的一些基本设置,如声明用户界面(在XML布局文件中定义),定义成员变量,并配置UI

注:onCreate()方法包含一个参数:savedInstanceState,这将会在后面重建Activity的内容中讲到。

Activity的第一个生命周期函数是onCreated,最后一个生命周期函数是onDestroy()。系统将调用onDestroy()函数作为Activity从内存中完全销毁去除的最后一个信号。
大多数的应用程序并不需要实现这个函数,因为局部类的引用将会和Activity一起销毁,而一些清理工作,主要也是在onPaused()和onStop()中。然而,如果你的Activity包含了有在onCreated()或者其他持续性运行的资源在后台线程运行,您就应该在onDestroy()方法中清除掉它们,而避免内存泄露。

1
2
3
4
5
6
7
    @Override
    public void onDestroy() {
        super.onDestroy();  // Always call the superclass

        // Stop method tracing that the activity started during onCreate()
        android.os.Debug.stopMethodTracing();
    }

注意 :一般来说,系统会在调用onPause()方法和onStop()之后才调用onDestory()方法,但是,有一种情况是例外的,那就是在你在onCreate()方法中调用finish()方法。在一些情况下,你的Activity作为一个临时决定的操作对象而去启动另外一个Activity时,你可能需要在onCreate()方法中调用finish()方法去销毁Activity,在这种情况中,系统会直接调用onDestroy()方法而不用再去调用其他的生命周期函数。



© 著作权归作者所有

共有 人打赏支持
mutouzhang
粉丝 6
博文 190
码字总数 91235
作品 0
洛阳
程序员
私信 提问
WatchOS系统开发大全(4)-WatchApp生命周期

WatchOSAPP生命周期 1.1-简介 WatchOS2.0之后的工程与WatchOS1.0的工程有什么不同之处? ExtensionDelegate文件是干嘛用的? WatchOS1.0没有应用的生命周期,只有WKInterfaceController的生命...

u013263917
2017/07/27
0
0
Fragment与Fragment相互切换之间的生命周期方法

Fragment 1 切换到 Fragment 2时生命周期变化 1、通过 add hide show 方式来切换 Fragment Fragment1 的生命周期变化为:onCreate()、onCreateView、onStart()、onResume() Fragment2 ...

李培能
2018/08/01
0
0
如何绑定页面生命周期(二)-基于Android Architecture Components的Lifecycle实现

上篇文章如何绑定页面生命周期(一)-Glide实现介绍了Glide实现生命周期感知的原理,这里我们再介绍基于Android Architecture Components的Lifecycle实现页面生命周期感知。 Lifecycle是And...

宇是我
2018/07/29
0
0
如何绑定页面生命周期(一)-Glide实现

Glide中一个重要的特性,就是Request可以随着Activity或Fragment的onStart而resume,onStop而pause,onDestroy而clear。从而节约流量和内存,并且防止内存泄露,这一切都由Glide在内部实现了...

宇是我
2018/07/27
0
0
小程序 — 小程序生命周期及页面生命周期

前言:很多同学容易将小程序生命周期和页面的生命周期混淆为一起,这两个其实应该是不同却又相互关联的生命周期,所以,用实际代码操作并结合官方理论讲讲这个,好好捋捋。 1、小程序生命周期...

Ewall_
2018/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWS的自动部署工具codedeploy 负载均衡器和github

Elastic Load Balancing 提供了三种可用于 CodeDeploy 部署的负载均衡器:Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。 传统负载均衡器 路由和负载均衡在传...

守护-创造
24分钟前
3
0
Docker 使用简介

Docker 是使用 GoLang 开发的开源容器引擎,可以方便的打包开发好的应用,然后分发到任意 linux 主机上。 与传统的虚拟机相比拥有以下优势: 高效的系统资源利用率 由于不需要进行硬件虚拟和...

YanWen
27分钟前
2
0
linux多线程编程,你还在用sleep么?用pthread_cond_timedwait吧

gnal(&cond); pthread_mutex_unlock(&mutex); printf(“Wait for thread to exit\n”); pthread_join(thread, NULL); printf(“Bye\n”); return 0; } 说明(翻译摘要中提供的连接,翻译的不好......

shzwork
35分钟前
1
0
MacOS源码编译安装 PostgreSQL

编译环境 Mac OSX 下只要装了 Xcode 就行,所有编译需要的工具和类库都有了。CentOS 下需要安装下面的软件包。 $ sudo yum install make gcc readline-devel zlib-devel flex bison 如果是从...

FeanLau
45分钟前
2
0
Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。 使用...

程序猿DD
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部