android学习笔记

发布 2021-05-12 00:31:28 阅读 1941

(1)activity是一种应用程序组件,是一个可与用户进行交互的可视化界面。

它继承自context, 同时实现了和 可以处理与用户的交互事件。

2)activity界面的具体内容可以通过xml布局文件来设置,使用activity,需要在配置文件中进行注册。

3)通常,一个用户界面对应一个activity,一个应用程序会有多个activity。

其中有一个称为main activity或者说入口activity, main activity在应用程序启动时首先被调用。

4)android通过栈(或者说任务)来管理activity,它遵循后进先出的规则。

一个activity a 可以通过startactivity()启动另一个activity b。

默认情况下,b被载入a所在的栈,对用户可见,而a则变为不可见。

当用户按下返回键后,b出栈并被销毁,a重新位于栈顶,对用户可见。

生命周期是指一个对象从创建到销毁的过程,这一过程对象会经历不同的状态,不同状态的转变会调用对象不同的生命周期方法。

activity有7个生命周期方法,分别是:

void oncreate()

/ onactivityresult()

void onrestart()

void onstart()

/ onrestoreinstancestate()

void onresume()

/ ons**einstancestate()

void onpause()

void onstop()

void ondestroy()

有三种状态,分别是:

运行(激活)状态、暂停状态、停止状态;

1)当通过startactivity()启动一个activity a时,a就进入了运行状态,此过程会执行a的oncreate() onstart() 和onresume()方法。

处于运行状态的activity位于栈的最顶部,并且对用户来说完全可见,用户可以与它进行交互;

2)此时,如果在a中启动一个对话框,覆盖了a的一部分界面,那么a就从运行状态变为暂停状态,此过程会执行a的onpause();

处于暂停状态的activity失去了焦点,对用户来说有一部分不可见,用户不能直接与它进行交互;

当用户销毁对话框,a会从暂停状态回到运行状态,此过程会执行a的onresume()方法;

3)当在a中启动另外一个activity b,b完全覆盖了a,那么a就从运行状态变为停止状态,此过程会执行a的onpause() 和 onstop()方法;

处于停止状态的activity对用户来说完全不可见,当系统内存紧缺时,有可能会被系统进行**。

当用户按下返回键销毁b回到a时,那么a会从停止状态回到运行状态,此过程会执行a的onrestart() onstart() 和onresume()方法;

4)当调用finish()销毁a时,会执行a的onpause() onstop() 和 ondestroy()方法;

5)如果activitya处于停止状态时因系统内存紧张而被销毁,那么重新返回到a时,系统会创建一个新activitya对象。

onactivityresult()-onrestart()-onstart()-onresume()

横竖屏切换时候,activity的生命周期与activity在配置文件中的android:configchanges属性有关。

activity 生命周期方法:

protected void oncreate();

protected void onrestart();

protected void onstart();

protected void onresume();

protected void onpause();

protected void onstop();

protected void ondestroy();

另外,还有三个较特殊的方法:

ons**einstancestate();

onrestoreinstancestate();

onconfigarationchanged();

1)当的android:configchanges的值为"orientation|keyboarhidden"或者"orientation"时:

横竖屏切换时,会执行activity的onconfigurationchanged()方法;

2)其它情况,在进行横竖屏切换时,会先销毁原有的activity对象,然后重新创建一个新的activity对象:

依次执行如下方法:

ons**einstancestate()

onpause()

onstop()

ondestroy()

oncreate()

onstart()

onrestoreinstancestate()

onresume()

在android2.2的模拟器上进行测试,结果与此会不相同。

模拟器按ctrl+f11切换横竖屏)

游戏开发中, 屏幕的方向都是写死的。

除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统**,一个activity越处于栈底,被**的可能性越大。)

为了防止**造成的数据丢失,)可以重写activity的ons**einstancestate(),将界面状态信息及相关数据保存起来;

再在oncreate() 或 onrestoreinstancestate()方法中对数据进行恢复:

protected void ons**einstancestate(bundle outstate)

注意:关于onrestoreinstancestate():

ons**einstancestate()方法和onrestoreinstancestate()并不一定是成对被调用的。

只有当activity确实被系统销毁了,才会调用onrestoreinstancestate(),如果仅仅是“可能会被销毁”,则该方法是不会被调用的。

例如:在activity a中,用户按下home键回到主界面,紧接着用户又返回到activity a。

这种情况下activity a一般不会因为内存的原因被系统销毁,所以activity a的onrestoreinstancestate()是不会被执行的。

假设有两个默认样式的activity a和b,1)如果在a中通过startactivity(new intent(context, 启动b,则一定会执行a的ons**einstancestate() onpause()和onstop()方法,以及b的oncreate() onstart() onresume();

如果activityb为对话框或透明样式,则此过程不会执行a的onstop()方法;

当finish()b返回到a时,会调用b的onpause() onstop() ondestroy(),以及a的onrestart() onstart() onresume();

如果b为对话框或透明样式,则此过程只会执行a的onresume()方法;

2)如果在a中是通过startactivityforresult(new intent(context, 0)启动b,则情况与(1)基本相似,不同的是当finish()b返回a时,还会多执行a的onactivityresult()方法;

执行次序是:onactivityresult()-onrestart()-onstart()-onresume())

同一个程序,但不同的activity是否可以放在不同的task任务栈中?(可以)

任务就是管理activity的栈,它只是针对activity而言,跟service或其它组件没有任何关系。

栈中的activity可能属于同一个应用,也可能来自不同的应用。

处于栈顶位置的对象就是当前屏幕显示的activity,用户可以与它进行交互。

栈中的activity一般不会进行重排,只会遵循后进先出的规则作压入或弹出操作;

Android学习笔记

1 stringbuffer的使用 stringbuffer类和string一样,也用来代表字符串,只是由于stringbuffer的内部实现方式和string不同,所以stringbuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于string类。所以在实际使用时,如果经常需要对一个...

android学习笔记

目录。1 拨号器。2 短信发送器。3 单元测试1 4 单元测试2 5 文本文件读写。6 跨应用文件访问。7 访问sd卡。8 dom解析xml 9 sax解析xml文件。10 使用pull解析xml文件。11 共享首选项。12 跨包访问共享首选项。13 编程式布局。14 sqlite数据库操作。15 ...

Android学习笔记

android学习笔记 mars 1 android环境搭建。a adt bundle windows x86 b 配置环境变量 虚拟机运行的环境变量 随便整一个 i.android sdk home c android work d 2 android目录结构。a src 源文件 j a b as...