Android笔记-活动生命周期&Bundle回收临时数据&活动启动模式&常用技巧

Android使用任务(Task)管理活动,是一组存放在返回栈(Back Stack)里的活动的合集;

系统总是显示栈顶活动给用户;

启动新活动->新活动入栈

按下Back键或调用finish()->栈顶活动出栈

活动生命周期的四种状态:

1. 运行状态:处于栈顶

2. 暂停状态:不处于栈顶,但仍然可见

3. 停止状态:不处于栈顶,完全不可见,系统仍然保存其状态和成员变量,但不可靠

4. 销毁状态:从栈中移除,活动被系统回收

Activity的七个回调方法:

1. onCreate():活动第一次被创建时调用,通常完成初始化操作

2. onStart():活动由不可见变为可见时调用,通常加载资源

3. onResume():活动准备与用户交互时调用,此时处于栈顶,运行状态

4. onPause():系统启动或恢复另一个活动时调用

5. onStop():活动完全不可见时调用,通常完成释放内存和资源操作

6. onDestroy():销毁前调用,之后变为销毁状态

7. onRestart():重新启动时调用,由停止状态变为运行状态

onPause()和onStop()的主要区别:启动新活动为对话框式活动时,执行onPause(),不执行onStop();

活动的三种生存期:

1. 完整生存期:onCreate()和onStop()之间的时期

2. 可见生存期:onStart()和onStop()之间的时期

3. 前台生存期:onResume()和onPause()之间的时期

例:

MainActivity第一次被创建时执行onCreate(), onStart(), onResume();

点击button1启动NormalActiviy,MainActivity执行onPause(), onStop()

点击button2启动DialogActivity,MainActivity只执行onPause()

因为DialogActivity没有完全遮挡MainActivity,MainActivity只是进入暂停状态而不是停止状态

点击Back键返回MainActivity,只执行onResume()

在MainActivity点击Back键退出程序,执行onPause(),onStop(),onDestroy()

通过Bundle在活动回收时保存临时数据

活动进入停止状态后,当内存不足时可能被系统回收。因为方法onSaveInstanceState()在活动被回收前一定会被调用,可通过重写该方法不保证临时数据的保存:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String tempData = "Something you just typed";
    outState.putString("data_key", tempData);
}

修改onCreate方法,在setConetentView()语句后添加:

if (savedInstanceState != null) {
    String tempData = savedInstanceState.getString("data_key");
    Log.d(TAG, tempData);
}

如果活动被系统回收前有通过onSaveInstanceState()保存数据,onCreate()接受的Bundle参数就会带有所保存的数据,可通过相应取值方法取出数据

运行程序,旋转屏幕使系统自动销毁活动,onSaveInstance()被调用,屏幕切换后系统自动创建活动调用onCreate()

活动的启动模式有四种:standard、singleTop、singleTask和singleInstance;

启动模式可在AndroidManifest.xml的<activity>中的android:launchMode属性指定;

standard:默认启动模式,系统不考虑返回栈中是否已有该活动,每次启动都会创建一个新的活动实例;

singleTop:如果栈顶已经是该活动,则直接使用,不会创建新的活动实例。如果未处于栈顶,创建新的活动实例;

singleTask:如果栈中已存在该活动实例则直接使用,并把该活动之上的所有活动出栈。如果没有则创建新的活动实例;

singleInstance:会启动一个单独的新返回栈管理该活动,访问该活动的应用程序共用一个(原)返回栈,从而共享活动实例;

技巧:快速判断当前在哪个活动

创建类BaseActivity,重写其onCreate()方法:

protected void onCreate(Bundle saveInstanceState) {
    super.onCreate(saveInstanceState);
    Log.d("ThirdActivity", "Task id is "+getTaskId());
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.third_layout);
}

使所有活动继承自父类BaseActivity,则每次调用onCreate()创建活动时能够打印实例类名,判断当前处于哪个活动。

技巧:快速退出程序

新建类ActivityCollector作为活动管理器:

public class ActivityCollector {
    public static List<Activity> activities = new ArrayList<Activity>();
    public static void addActivity(Activity activity) {
        activities.add(activity);
    }
    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }
    public static void finishAll() {
        for (Activity activity : activities) {
            if(!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}

修改BaseActivity中代码,在onCreate()中添加:

ActivityCollector.addActivity(this);

在onDestroy()中添加:

ActivityCollector.removeActivity(this);

在需要一键退出程序的按钮监听事件中添加:

ActivityCollector.finishAll();

技巧:传递数据启动活动的写法

在需要接收Intent传递的数据的活动SecondActivity中添加方法actionStart():

public static void actionStart(Context context, String data1, String data2) {
    Intent intent = new Intent(context, SecondActivity.class);
    intent.putExtra("param1", data1);
    intent.putExtra("param2", data2);
    context.startActivity(intent);
}

在其中完成intent的构件,这样所有SecondActivity所需的数据都在方法参数中体现;

在需要启动SecondActivity的按钮监听事件中直接调用:

SecondActivity.actionStart(FirstActivity.this,"data1","data2");

参考资料:《第一行代码》

时间: 2024-10-16 13:51:00

Android笔记-活动生命周期&Bundle回收临时数据&活动启动模式&常用技巧的相关文章

Android活动生命周期

一.Android活动 活动是 Android 应用框架中的一个核心组件,它在一个窗口(Window)对象中绘制用户接口并响应用户的交互. Android四大核心组件分别为Activity(活动).Service(服务).Content provider(数据源).Broadcastreceiver(广播接收器). 官方文档是这么定义的:"An Activity isan application component that provides a screen with which users

android:碎片的生命周期

和活动一样,碎片也有自己的生命周期,并且它和活动的生命周期实在是太像了,我相 信你很快就能学会,下面我们马上就来看一下. 4.3.1    碎片的状态和回调 还记得每个活动在其生命周期内可能会有哪几种状态吗?没错,一共有运行状态.暂停 状态.停止状态和销毁状态这四种.类似地,每个碎片在其生命周期内也可能会经历这几种 状态,只不过在一些细小的地方会有部分区别. 1.    运行状态 当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行 状态. 2.    暂停状态 当一个活动进

Android进程的生命周期

Android系统想要永久的保留一个应用进程几乎是不可能的,所以系统就需要不断的释放老的或者不太重要的进程以便腾出足够的内存空间来运行新的或者更重要的进程,那么系统如何决定哪个进程应该保留哪个应该杀死呢,原来系统会根据进程中运行组件以及他们的状态列出一个"重要层级",当内存出现紧张的时候,系统会首先杀死最不重要的进程,接着是第二个,第三个...,以此类推来不断的释放系统资源直到内存不再紧张为止. 根据这个重要层级系统把进程分为了5个级别,下面要说的就是这五种不同的进程类型: 1.for

Android开发--Activity生命周期回顾理解

Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servlet的实例,何时调用servlet的方法向用户生成响应,程序员无法控制,这种回调由服务器自行决定.Activity也一样,被开发出来,开发者只要在AndroidManifest.xml文件配置该Activity即可.至于该Activity何时被实例化,它的方法何时被调用,对开发者来说完全是透明的.

Android之Activity生命周期浅析(一)

??Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Activity的生命周期,以便我们在以后的开发中能如鱼得水. 一.初识Activity ??在日常应用中Activity是与用户交互的接口,它提供了一个用户完成相关操作的窗口.当我们在开发中创建Activity后,通过调用setContentView(View)方法来给该Activity指定一个布局

Android之Activity生命周期的浅析(二)

??上一篇文章,我们主要分析了Activity的正常情况下生命周期及其方法,本篇主要涉及内容为Activity的异常情况下的生命周期. Activity异常生命周期 ??异常的生命周期是指Activity被系统回收或者当前设备的Configuration发生变化(一般指横竖屏切换)从而导致Activity被销毁重建.异常的生命周期主要分以下两种情况: 1.相关的系统配置发生改变导致Activity被杀死并重新创建(一般指横竖屏切换) 2.内存不足导致低优先级的Activity被杀死 1.相关的系

Android:Activity生命周期

Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack). 栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置. 每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置.系统总是会显示处于栈顶的活动给用户. 一.活动状态每个活动在其生命周期中最多可能会有四种状态.1. 运行状态当一个活动位

重温Android和Fragment生命周期

重温下Android和Fragment生命周期,理解生命周期方法的作用,什么时候调用,可以做一些什么操作. 1.Android生命周期 1.1 生命周期图 1.2 生命周期函数说明 onCreate:Activity正在创建,生命周期的第一个方法,需要setContentView加载layout.这里不建议耗时操作,只做layout和控件初始化.此方法传递一个 Bundle 对象,可以获取上一个Activity 的状态. onStart:Activity正在启动,此时Activity已处于可见状

活动的生命周期系列(一)活动栈的生命周期

生命周期对程序员很重要,特别当我们了解,就可以写出更流畅的程序,更好的来避规性能瓶颈,让我们的APP拥有更好的用户体验.我们继续来分享"活动状态及生存周期",活动状态:运行状态,暂停状态,停止状态,销毁状态.活动的生成周期分别为:onCreate().onSart().onResme().onPause().onStop().onDestroy().onRestart(). 1.运行状态:当一个活动处于栈的顶部时,这时活动就处于活动状态,系统是不愿意回收处于活动状态的,会影响用户体验.