starting an activity

开启一个activity

不像其他应用程序是在main方法中启动的,android系统启动一个activity实例是通过唤醒一个符合生命周期特定状态的回调方法来实现的。这里有一系列的回调方法去开启一个activity也有一系列的回调方法去销毁一个activity。

本节课提供了所有重要生命周期函数的概述并且告诉你在创建一个新的activity实例时如何去处理生命周期函数。

理解生命周期回调函数


在一个activity的生命中,系统调用一系列生命周期方法的顺序类似于阶梯排列的金字塔。每一个生命周期状态是金字塔中分开的阶梯。当系统创建一个新的activity实例时,每一个生命周期函数从下往上一层一层被调用并且依次改变activity的状态。金字塔的顶层代表activity已经在前台运行而且用户可以与之交互。

当用户开始离开activity时,系统调用其他的方法沿着金字塔从上往下一级一级去改变activity的状态,为的是拆除activity。在有些情况下,activity只会从金字塔上调用一部分方法并等待(例如用户切换到另一个app),从这个点可以返回到金字塔的顶部(如果用户返回到该activity)并且从离开的地方重新占用屏幕。

        

 

由于activity设计复杂,你也许不需要去实现所有的生命周期函数。但是,理解每一个生命周期函数是很重要的,它们可以确保你的app做用户期望做的事情。正确实现activity的生命周期函数确保你的app在以下几个方面表现出色:

1.用户在使用你的app时不会因为一个电话或者切换到其他app而导致系统瘫痪

2.当系统不使用activity时不会消耗宝贵的系统资源

3.当用户离开并且很久之后才回来时,不会丢失用户的进程

4.当屏幕旋转时不会丢失或者损坏用户的进程

学习本章节后,你会发现,只有三个状态是可以是静止的,activity可以停留在这三个状态中的任意一个状态下一段时间,三个状态分别是:

1.Resumed(继续,本人理解是占用屏幕时)

在这个状态下的activity在前台显示并且用户可以与他们交互(有些时候可以当作"running"状态)

2.Paused

在这个状态下的activity是被其他activity部分遮挡的--半透明或者没有被全部覆盖。处于该状态下的activity不接受用户的输入且不能执行任何代码。

3.Stopped

在这个状态下的activity是完全被遮挡而且用户不可见,可以认为它在后台。处于该状态下activity实例的成员变量被保留,但是不能执行任何代码。

至于其他的状态(Created和Started)是瞬时状态并且系统迅速的切换他们。事实上是,系统在回调onCreate()方法后会迅速调用onStart()方法,紧接着调用onResume()方法。

  以上就是activity基本的生命周期。下面我们一起学习一下特定的生命周期函数所做作的事情。

具体说明你的activity是如何启动的


当用户从桌面上点击你app图标时,系统会调用该app中你声明的launch(或main)activity中的onCreate()方法,这个activity相当于你用户进入你app的入口。

你可以在AndroidMainfest.xml文件中定义你的主activity,主activity必须在AndroidMainfest.xml的<intent-filter>标签中声明,并且该标签中包含MAIN 行为 LAUNCHER种类。例如:

<activity android:name=".MainActivity" android:label="@string/app_name">

  <intent-filter>

    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

需要注意的是,如果你的app中没有一个activity包含包含MAIN 行为和 LAUNCHER种类标签的话,你app的图标是不会出现在用户屏幕上的。

创建一个新实例


大部分的app包含多个不同的activities并且允许用户执行不同的操作。无论你的activity是不是主activity,当用户点击app的图标或者你的app启动了其他的activity去响应用户的操作,系统会通过回调onCreate()方法创建该activity的新实例。
 
你必须实现onCreate() 方法来执行该activity整个生命周期中只发生一次的启动逻辑。举例来说,你实现onCreate()方法应该定义用户界面和实例化一些类的变量。
 
例如, 以下示例onCreate() 方法显示一些代码,执行一些基本的设置为活动,如声明用户界面(在XML布局文件中定义),定义成员变量,和配置一些UI。

TextView mTextView; // Member variable for text view in the layout

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    // 设置activity的布局文件

    // 布局文件定义在res/layout/main_activity.xml文件中

    setContentView(R.layout.main_activity);

    // 初始化TextView,方便我们以后使用

    mTextView = (TextView) findViewById(R.id.text_message);

}

一旦onCreate()执行完毕后,系统会快速连续的调用onStart()和onResume()方法。你的activity从来不会驻留在创建或启动状态。从技术上来说,你的activity在onStart()方法执行后就是可见的了,但是onResume()方法紧接着迅速的跟上并且你的activity停留在该状态直到一些事发生改变了它,比如电话被接听,用户去了其他的activity或者设备屏幕被关闭。

在接下来的其他课程,你会怎么看其他启动方法如:onStart()和onResume()。从暂停或停止状态重新启动是activity生命周期中非常有用部分

                          。

销毁Activity


当activity的生命周期函数第一次回调onCreate()方法后,最后回调的方法是onDestory()。系统调用该方法是最后的信号说明你的activity即将完全被销毁。

大部分的app不需要实现该方法因为系统会自动调用并销毁而且你应该在onPause()和onStop()方法中做大部分的清理工作。然而,如果你的activity包含在onCreate()方法中启动的后台线程或其他长期运行的资源可能导致内存泄漏,如果没有正确关闭,你应该在onDestory()中杀死他们。

@Override

public void onDestroy() {

    super.onDestroy();  // Always call the superclass

    // Stop method tracing that the activity started during onCreate()

    android.os.Debug.stopMethodTracing();

}

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/ztSpace/p/4216101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值