Android开发---探究活动(三)

活动的生命周期

返回栈:Android是使用Task来管理活动的,一个任务就是一组存放在栈里的的活动的集合,这个栈被称之为返回栈。栈是一种先进先出的数据结构,在默认情况下当启动一个新的活动,它会在返回栈中入栈,处于栈顶的位置,当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。



活动状态:活动在其生命周期中最多可能会有4种状态。

  • 运行状态,当活动位于返回栈顶时,活动就处于运行状态。(注意:系统最不愿意回收处于运行状态的活动)
  • 暂停状态,活动不再处于栈顶位置,但任然可见,这时活动处于运行状态。(注意:并不是所有的活动都占满整个屏幕的,比如对话框形式的活动只会占用屏幕中间。系统也不愿意去回收这种活动,只有在内存极低的情况下,系统才会考虑回收这种活动)
  • 停止状态,活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。(注意:系统任会保存相应的状态和成员变量,但这并不完全可靠,当其他地方需要内存时可能会被系统回收)
  • 销毁状态,活动从返回栈中移除后就变成了销毁状态(注意:系统会倾向于回收这种活动,从而保持手机内存充足)


活动生存期:Activity类中定义了7个回调方法,这个些方法存在于活动生命周期的每一个环节。

  • onCreate()在活动第一次创建的时候调用,这个方法一般用于完成活动的初始化操作,比如加载布局、绑定事件等。
  • onStart()在活动由不可见变为可见的时候调用。
  • onResume()在活动准备好和用户进行交互的时候调用。此时活动一定位于返回栈的栈顶,并处于运行状态。
  • onPause()在系统准备去启动huo或者恢复另一个活动的时候调用。
  • onStop在活动完全不可见的时候调用,它和onPause()的主要区别在于,如果启动的活动是一个对话框式的活动,那么onPause()会得到执行,而onStop()方法并不会执行。
  • onDestroy()在活动销毁之前调用,之后活动的状态将变为销毁状态。
  • onRestart()在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

案例体验:

新建一个android项目,新建三个Activity分别命名为:MainActivity(布局名为main_layout)、NormalActivity(布局名为normal_layout)、DialogActivity(布局名为dialog_layout)。


NormalActivity中内容为:

package com.example.tenderness.activitylifecycletest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class NormalActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.normal_layout);
    }
}


normal_layout.xml中内容为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a normal activity" />


</LinearLayout>

DialogActivity中内容为:

package com.example.tenderness.activitylifecycletest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);
    }
}


dialog_layout.xml中内容为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a dialog activity" />


</LinearLayout>


MainActivity中内容为:

package com.example.tenderness.activitylifecycletest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    public static final String  TAG ="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        Log.d(TAG,"onCreate----正在创建活动");

        Button startNormalActivity=(Button)findViewById(R.id.satrt_normal_activity);
        startNormalActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);
            }
        });

        Button startDialogActivity=(Button)findViewById(R.id.start_dialog_activity);
        startDialogActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG,"onStart----动由不可见变为可见");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG,"onResume----活动准备好和用户进行交互");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG,"onPause----系统准备去启动huo或者恢复另一个活动");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG,"onStop----活动完全不可见");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"onDestroy----活动销毁之前");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG,"onRestart----活动由停止状态变为运行状态之前");
    }
}


main_layout.xml内容为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/satrt_normal_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start NormalActivity" />

    <Button
        android:id="@+id/start_dialog_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start DialogActivity"/>


</LinearLayout>

在AndroidManifest.xml中设置DialogActivity为对话框活动:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tenderness.activitylifecycletest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".NormalActivity" />
        <activity android:name=".DialogActivity"
            android:theme="@android:style/Theme.Dialog">
        </activity>
    </application>

</manifest>










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值