重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4432|回复: 2

Android 应用层

[复制链接]

7

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2017-12-22 15:14:16 | 显示全部楼层 |阅读模式
本帖最后由 谭见文-15电气 于 2017-12-28 21:57 编辑

一、Activity的生命周期

①Activity正在被创建。
Activity创建的时候,调用代码完成界面布局;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
②Activity正在重新启动
@Override
protected void onRestart() {
    super.onRestart();
}

③Activity正在启动。这个时候活动已经显示,但是还没有绘制,肉眼看不到。可以理解为透明
@Override
protected void onStart() {
    super.onStart();
}

④Activity正在前台,并且能够与用户进行交互(我们平时最常见的界面就是处于这个状态的)
@Override
protected void onResume() {
    super.onResume();
}

⑤Activity暂停,这个时候处于部分可见的状态
@Override
protected void onPause() {
    super.onPause();
}

⑥Activity正在停止
@Override
protected void onStop() {
    super.onStop();
}

⑦Activity即将销毁。
Activity销毁时,调用代码,完成资源的释放;
@Override
protected void onDestroy() {
    super.onDestroy();

}
%1KN1%6)EU$PHM(][8FH@)7.png
1  生命周期状态
全生命周期:从创建到销毁的整个阶段
可见生命周期:用户能够看到的整个阶段
前台生命周期:用户进行交互的阶段
生命周期类型.png
2  Activity切换周期
2.1完全周期
从一个Activity创建出来,到显示,再到用户按返回键主动退出销毁这个Activity,它将经历:
onCreate()->
onStart()->
onResume()->
用户可以与Activity交互,用户按返回键主动退出->
onPause()->
onStop()->
onDestroy();
2.2从一个Activity到另一个Activity
Activity A创建出来,并显示;然后Activity A启动另一个Activity B,B创建出来,并显示,它们将经历:
Activity AonCreate()->
Activity AonStart()->
Activity A onResume()->
用户可以与Activity A交互,然后Activity A启动另一个Activity B,
Activity AonPause()->
Activity BonCreate()->
Activity BonStart()->
Activity BonResume()->
Activity AonSaveInstanceState()->
Activity AonStop()->
Activity A被隐藏,用户可以与Activity B交互;










回复

使用道具 举报

7

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2017-12-22 15:48:38 | 显示全部楼层
本帖最后由 谭见文-15电气 于 2017-12-28 21:58 编辑

二、Activity的系统回收
1  系统资源紧张

应用打开过多,导致系统的可用内存很少。
在回收资源的时候,系统会根据这些资源所在的进程优先级来判断。进程优先级高的,最后回收;进程优先级低的,最先回收。
前台优先级-IMPORTANCE_FOREGROUND
可见优先级-IMPORTANCE_VISIBLE
服务优先级-IMPORTANCE_SERVICE
后台优先级-IMPORTANCE_BACKGROUND
空优先级-IMPORTANCE_EMPTY


Activity被回收,会重新用它onCreate()创建出来,用户输入的一大段东西可能会清除;
Android提供了onSaveInstanceState()回调函数来保持数据;
2  屏幕旋转
如果一个Activity从创建出来,到显示,然后旋转,那么它将经历:
onCreate()->
onStart()->
onResume()->
用户可以与Activity交互,此时屏幕进行旋转,从竖屏变横屏->
onPause()->
onSaveInstanceState()->
onStop()->
onDestroy()->
onCreate()->
onStart()->
onRestoreInstanceState()->
onResume()->
用户可以与Activity交互;

同样Activity被create两次,数据被清除的问题,这里有两种方法;
onSaveInstanceState()和onRestoreInstanceState()可用用来保存和还原这些数据;
在AndroidManifest.xml文件中,给这个Activity组件加上android:screenOrientation="orientation|screenSize"的属性就可以了;

经历的过程:
这种Activity从创建出来,到显示,然后旋转,那么它将经历:
onCreate()->
onStart()->
onResume()->
用户可以与Activity交互,此时屏幕进行旋转,从竖屏变横屏->
onConfigurationChanged();
在被触发的onConfigurationChanged()函数中,可以感知到屏幕的变化,

如此一来,这个Activity在旋转时就不会重走销毁、创建的过程了,而只是在旋转后经历一个onConfigurationChanged()。
这种情况下,即使它存在横屏布局文件,这个横屏布局也不会被使用到,因为onCreate()并没有被调用到,也就不会调用setContentView)了。












回复 支持 反对

使用道具 举报

7

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2017-12-22 16:38:45 | 显示全部楼层
本帖最后由 谭见文-15电气 于 2017-12-28 21:58 编辑

三、程序初步调试
1  静态调试

在代码前面加上小红点,点击debug run进行断点调试
红点.gif
界面.gif
步骤.gif
2  动态调试
Log的中文名字叫做日志,在编程界表示程序运行过程中打印出的信息。
private final String TAG="Debug:";
Log.X(“TAG”,”content”);
X代表v d I w e,例子中我们用的w,我们在应用中调试程序,通常就使用d。
3_4_3_add_log.png
Logcat用来查看程序输出的log。我们可以选择log的类型(v d i w e)来过滤log。
Log.gif















回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-18 12:45 , Processed in 0.179675 second(s), 31 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表