Android进阶知识点(Activity生命周期)

Activity的生命周期

每个activity都有其生命周期,在其生命周期内,Activity在运行、暂停和停止三种可能的状态之间转换。每次状态发生转换时,都有对应的Activity方法将状态改变的消息通知给Activity

Activity通过覆盖onCreate(。。。)方法来准备以下用户界面相关的工作:

实例化组件并将组件放置到屏幕上(setContentViewint)方法);

引用已实例化的组件;

为组件设置监听器以处理用户交互;

访问外部模型数据。

注意:不要自己去调用activity的生命周期中的任何方法。

旋转设备会改变设备配置。设备配置是用来描述当前设备一系列特征。

未匹配不同的设备配置,应用会提供不同的备选资源。(比如创建屏幕水平方向上的布局)

FrameLayout不以特定方式安排子视图的位置。FrameLayout子视图的位置排列取决于它们各自的androidlayout_gravity属性。

注:在应用程序中,只要设备配置发生了改变,Android就会销毁当前activity,然后再创建新的activity

未解决屏幕旋转导致的数据改变,我们可以通过覆盖Activity方法:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

该方法通常在onPause(),onStop()和onDestory()方法之前由系统调用。

方法onSaveInstanceState...)的默认实现要求所有activity视图将自身状态数据保存在Bundle

对象中。Bundle存储是一种键值对结构。覆盖onCreate()方法时,我们传入bundle,通过取出保存的视图状态数据,activity的视图层级结构得以重新创建。

private static finalStringKEY_INDEX="index";

protected voidonSaveInstanceState(BundleoutState) {
    super.onSaveInstanceState(outState);
    Log.d(TAG,"onSaveInstanceState() called");
    outState.putInt(KEY_INDEX,mCurrentIndex);
}

onCreate()中:

if(savedInstanceState!=null){
    mCurrentIndex=savedInstanceState.getInt(KEY_INDEX,0);
}

注意:在Bundle中存储和恢复的数据类型只能是基本数据类型以及可以实现SerializableParcelable接口的对象。通过其他方式保存定制类对象,在Bundle中保存对象对应的基本数据类型的标识符。

用户离开当前activity管理的用户界面,或Android回收内存时,activity也会被销毁。

Activity记录:activity暂存后,Activity对象不再存在,但操作系统会将activity记录对象保存起来。在需要恢复activity时,操作系统可以使用暂存的activity记录重新激活activity

覆盖onSaveInstanceState()将数据暂存到Bundle对象中,覆盖onPause()方法处理其他需要处理的事情。

单击主屏幕键会暂停并停止当前的activity;单击返回总是会销毁当前的activity

android.util.Log类记录日志信息,有五种级别。

 

 

Android应用的调试

异常与栈跟踪:遇到运行异常时记得在LogCat中寻找最后一个异常及其栈追踪的第一行。

诊断应用异常:(两种跟踪问题的方法)①记录栈跟踪的诊断性日志

②利用调试器设置断点调试Run->Debug’app’(停止调试的方法:Stop按钮,Close按钮)

使用异常断点:Run-> View Breakpoints

Android特有的调试工具:①Android LintAndroid应用代码的静态分析器;无需代码运行就能够检查代码错误的特殊程序。

R类的问题:重新检查资源文件中XML文件的有效性(拼写错误);清理项目Build->Clean Project;使用Gradle同步项目;运行Android Lint

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值