一 Activity的生命周期
二 让Activity变成一个窗口:Activity属性设定
三 你后台的Activity被系统回收怎么办:onSaveInstanceState
一 Activity的生命周期
和其他手机平台的应用程序一样,Android的应用程序的生命周期是被统一掌控的,也
就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并
适应它。
简单地说一下为什么是这样:我们手机在运行一个应用程序的时候,有可能打进来电话
发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另
外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可
能被干掉。
Activity的生命周期历经以下几个阶段:
public
class MyActivity extends Activity {
protected
void onCreate(Bundle savedInstanceState);
protected
void onStart();
protected
void onResume();
protected
void onPause();
protected
void onStop();
protected
void onDestroy();
}
在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart -> onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume,如果打断 这个应用程序的是一个Theme为Translucent或者Dialog的Activity那么只是onPause,恢复 的时候onResume。
详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
onCreate: 在这里创建界面,做一些数据的初始化工作
onStart: 到这一步变成用户可见不可交互的
onResume: 变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个
Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause: 到这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情
从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候
你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在
onResume里读出来,注意:这个方法里做的事情时间要短,因为下一
个activity不会等到这个方法完成才启动
onstop: 变得不可见,被下一个activity覆盖了
onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方
法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判
断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里
把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛
异常的。
onPause,onstop, onDestroy,三种状态下 activity都有可能被系统干掉
为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。实际工作中因为生命周 期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为 Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。
二 让Activity变成一个窗口:Activity属性设定
讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很
简单你只需要设置一下Activity的主题就可以了在AndroidManifest.xml 中定义Activity的
地方一句话:
Xml代码
android:theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"
这就使你的应用程序变成对话框的形式弹出来了,或者
Xml代码
android:theme="@android:style/Theme.Translucent"
android:theme="@android:style/Theme.Translucent"
就变成半透明的,[友情提示-.-]类似的这种activity的属性可以在android.R.styleable类的AndroidManifestActivity方法中看到,AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable
上面说的是属性名称,具体有什么值是在android.R.style中可以看到,比如这个"@android:style/Theme.Dialog"就对应于android.R.style.Theme_Dialog,('_'换成'.' <--注意:这个是文章内容不是笑脸)就可以用在描述文件中了,找找类定义和描述文件中的对应关系就都明白了。
三 你后台的Activity被系统回收怎么办:onSaveInstanceState
当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B
这个时候A会执行
Java代码
public
void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong("id", 1234567890);
}
public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("id", 1234567890);}
B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回
收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数
savedInstanceState,没被收回的就还是onResume就好了。
savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。
Java代码
if(savedInstanceState != null){
long id = savedInstanceState.getLong("id");
}
if(savedInstanceState != null){ long id = savedInstanceState.getLong("id");}
就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那 个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置...
分享到:
相关推荐
Activity 详解 Activity 详解
### Android Activity 详解 在Android应用开发中,`Activity`是四大组件之一,它负责管理用户界面,并且是用户与应用程序交互的主要入口。一个应用程序通常包含多个Activity,它们通过特定的方式进行通信和交互。 ...
Android四大组件之Activity详解 Android四大组件中的Activity是最基本也是最重要的组件之一。Activity是用户与应用程序交互的入口点,负责处理用户的交互请求,并将结果返回给用户。今天,我们将深入探讨Activity...
**ViewPager加载Activity详解** ViewPager是Android开发中一个非常重要的组件,它主要用于实现界面间的滑动切换效果,使得用户可以通过左右滑动来浏览多个视图。在Android应用设计中,ViewPager通常与Fragment配合...
activity之间的传递数据的详解。代码简单易懂
### 详解 Android 的 Activity 组件 #### 概述 在Android开发中,`Activity`是四大组件之一,它是用户界面的基础单位,也是Android应用中最重要的组成部分之一。一个Android应用通常由多个`Activity`组成,每个`...
### Android四大组件之一的Activity详解 #### 一、Activity简介 **Activity** 是 Android 开发中的四大组件之一,它提供了一个界面供用户进行交互,以完成特定的任务。每个 Activity 都是一个可视化的屏幕,上面...
**一、Activity详解** Activity是用户与应用交互的窗口,代表屏幕上的一个可视界面。它的生命周期包括: 1. `onCreate()`:Activity创建时调用,用于初始化界面和数据。 2. `onStart()`:Activity开始变得可见,但...
### Android APK外部调用应用Activity详解 在Android开发中,应用程序之间通过Intent机制进行通信,这一特性使得一个应用可以启动另一个应用的组件(如Activity、Service等),从而实现跨应用的功能交互。本文将...
一、什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifestxml中指定一个主的Activity,如下设置 当程序第一次运行时...
### Activity详解 `Activity`是Android应用的核心组成部分,代表了用户可见的屏幕界面。一个`Activity`通常对应着用户界面上的一个独立任务或者功能。例如,登录界面、主屏幕或者设置页面等都可以是独立的`Activity`...
### 详解Android开发中的Activity组件 #### 概述 在Android开发中,`Activity`是四大组件之一,扮演着至关重要的角色。它负责提供用户界面并处理与用户的交互,每一个`Activity`通常对应一个屏幕。本文将深入探讨`...
### Android系统Package与Activity详解 #### 一、Package包 **Package** 在Android应用程序中扮演着至关重要的角色。它不仅定义了一个应用的基本单位,还确保了应用的独特性和可识别性。 1. **唯一性**: 每个...
门——Activity(一) Activity是什么: Activity作为Andorid的四大组件之一,为用户提供了一个界面,即我们能看到的界面。相当于一张画画用的纸,我们可以在上面画任何我们想要的内容。 Activity的创建: 就像我们...