Android开发Android知识Android开发

Activity的生命周期

2017-12-24  本文已影响0人  olaH

前言

你要记得这些人,是这些温暖使你成为善良的。

Activity的生命周期演示

归纳起来,Activity大致会经过如下4种状态。
下图显示了Activity的生命周期及相关回调方法。
activity.png
从图中可以看出,在Activity的生命周期中,如下方法会被系统回调。
接下来用代码来说明Activity这7个回调方法是何时被调用的。

代码示例


效果

当程序启动时将会自动启动并执行Activity,此时在LogCat窗口可以看到如下输出。
activity1.PNG
当单击该程序界面上的跳转Activity的按钮时,第二个Activity进入前台,虽然第一个Activity不能获得焦点,但依然“部分可见”,此时刻Activity进入“暂停状态”。如下图
activity2.PNG
在当前状态下,按下模拟器右边的返回键,Activity再次进入运行状态。
activity3.PNG
当点击模拟器右边的回到主界面的按键时,Activtiy将进入停止状态。
activity4.PNG
在模拟器程序列表再次找到该程序并启动它时。
activity5.PNG
当单击程序中的退出按钮时。
activity6.PNG

Activtiy的加载模式

Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用的入口Activity。那么Activity的加载模式就负责管理实例化、加载Activity的方式,并可以控制Activity与Task之间的加载关系。下面就来详细介绍它的四种加载模式。

standard模式

标准模式,这是默认的加载模式。每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,新Activity将被添加到原有的Task中。
standard1.png

代码示例

public class StandardActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        this.setContentView(layout);
        //创建一个TextView来显示该Activity和它所在的TaskID
        TextView tv = new TextView(this);
        tv.setText("Activity为:" + this.toString() + "\n" + ",Task ID为:" + this.getTaskId());
        Button button = new Button(this);
        button.setText("启动");
        layout.addView(tv);
        layout.addView(button);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(StandardActivity.this,StandardActivity.class);
                startActivity(intent);
            }
        });
    }
}
运行该程序,多次单击程序界面上的“启动”按钮,程序将会不断启动新的StandardActivity实例(不同Activity实例的hashCode值有差异),但它们所在的Task ID总是相同的。

singleTop模式

这种模式与standard模式基本相似,但有一点不同:当将要启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activtiy的实例,而是直接复用已有的Activity实例。
如果将上面实例中StandardActivity的加载模式改为singleTop,(配置Activity时可指定android:launchMode属性)。那么无论用户单击多少次按钮,界面上的程序都不会有变化。
如果将要启动的目标Activity没有位于Task栈顶,此时系统会重新创建目标Activity的实例,并将它加载到Task栈顶——此时与standard模式完全相同。

singleTask模式

采用这种加载模式的Actvity在同一个Task内只有一个实例,当系统采用singleTask模式,启动目标Activity时,可分为如下三种情况。
上一篇 下一篇

猜你喜欢

热点阅读