android学习日记02--Activity简介
一、Activity活动
学习Android,第一个都会接触Activity滴,Activity表示一个用户界面,是Android应用程序的入口,可以同时有多个界面,但只会显示栈顶的界面。
Activity是Android的重要组成部分,一个程序包括多个Activity,新建项目都会有个程序启动时就调用的MainActivity。新定义Activity需在AndroidManifest配置。
如下是最简单的配置方式:
<activity
android:name=".OtherActivity"
android:label="other" >
</activity>
二、Activity的生命周期
Activity的生命周期交由系统管理,每个Activity都是平等的,Activity拥有四种基本状态
1、Active/Running:一个新的Activity启动入栈后,它在屏幕的最前端,处于栈顶。此时它处于可见和可交互状态;
2、Pause:当Activity被一个透明的或Dialog样式的Activity覆盖时,它虽然仍与窗口管理器联系,仍然可见,但是此时它是失去焦点,不可交互的;
3、Stop:当Activity被另一个Activity覆盖时,完全不可见,并且不可交互,此时处于stop状态;
4、Kill:被系统进程杀死或者回收的状态,由于系统资源有限,越是处于栈的底层,越容易被回收;
上面是google官方的Activity生命周期示意图,看图比较好理解和记忆Activity生命周期。结合生命周期状态来讲讲生命周期相关方法
1、onCreate:Activity被启动的调用的第一个方法,作为应用程序的入口点,一般做些 数据初始化和加载用户界面的工作;
2、onStart:在onCreate之后被调用,或者一个Activity从Stop变为Active状态;
3、onResume:从Pause状态被切换为Active状态时被调用;
4、onStop:从Active状态被切换为Stop状态时被调用,一般在这里保存Activity的状态信息;
5、onDestroy:在Active被结束时调用,一般做些释放资源,清除内存等工作。
此外还有一些不常用的方法如"重新启动 onRestart","暂停 onPause"
我们可以新建个Activity,Android.util的 Log类可以实现Android输出Log这一操作,
该类提供了若干静态方法
Log.v(String tag, String msg);
Log.d(String tag, String msg);
Log.i(String tag, String msg);
Log.w(String tag, String msg);
Log.e(String tag, String msg);
分别对应 Verbose, Debug, Info, Warning,Error.
tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件。
如Log.v(tag, msg)用来打印日志查看不同状态间的切换或不同方法的执行情况。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("MainActivity", "onCreate");
} @Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.v("MainActivity", "onStart");
} @Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v("MainActivity", "onStop");
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.v("MainActivity", "onResume");
} @Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.v("MainActivity", "onPause");
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v("MainActivity", "onDestroy");
}
三、Activity栈
Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。
除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。
四、Activity的加载模式
Activity有四种加载模式(一直忽略这个细节),使用适合的加载模式可以避免产生大量的重复的Activity,从而优化性能,减少系统资源消耗。具体为:
1、standard: 标准模式(默认的),一调用startActivity()方法就会产生一个新的实例。
2、singleTop: 检查是否已经存在了一个实例位于Activity栈的顶部,如果存在就不产生新的实例,反之则调用Activity的newInstance()方法产生一个新实例。
3、singleTask: 在一个新的Task(栈)中产生这个实例,以后每次调用都会使用此实例,而避免产生新的实例。
4、singleInstance: 这个基本上跟singleTask一样,只是有一点不同,那就是在这个模式下的Activity实例所处(新建的)Task中,只能有这一个Activity实例,而不能有其他的实例。
启动模式可以Android清单文件AndroidManifest.xml中,通过<activity>中的launchMode属性进行设置
<activity android:name="MainActivity" android:launchMode="singleTop">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
也可以在代码中通过一些标志进行设置
Intent intent = new Intent(this,xxx.class);
//如果activity在task存在,拿到最顶端,不会启动新的Activity
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
//如果activity在task存在,将Activity之上的所有Activity结束掉
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//默认的跳转类型,将Activity放到一个新的Task中
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果Activity已经运行到了Task,再次跳转不会在运行这个Activity
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
五、Activity间的通信
Activity.startActivity()方法可以根据传入的参数启动另外一个 Activity:
//Intent可以在不同的应用程序的Activity发送数据
intent.putExtra("testIntent", "Robin");
intent.setClass(MainActivity.this, OtherActivity.class);
//从哪里跳到哪里
MainActivity.this.startActivity(intent);
另一Activity里再接收信息(新的Activity如第一点说的要在AndroidManifest配置)
Intent intent=getIntent();
String value=intent.getStringExtra("testIntent");
六、其他细节
back和home 按键对Activity作用的区别?
当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了。按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入,会直接显示程序栈中最上层的Activity。
android学习日记02--Activity简介的更多相关文章
- android学习日记22--Animation动画简介
Animation动画主要有两种:帧动画(Frame Animation)和补间动画(Tween Animation).补间动画主要包括对位置.角度.尺寸等属性的变化,而帧动画则是通过若干帧图片轮流切 ...
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- 【Android学习日记】
(一) Android 开发基础 1 Android平台的特性 1) 应用程序框架支持组建的重用和替换,包括打电话应用程序.文件管理器等. 2) Dalvik虚拟机专门为移动设备做了优化,Dalv ...
- android学习四(Activity的生命周期)
要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...
- Android学习笔记之Activity详解
1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...
- android学习笔记26——Activity
Activity ==> android中四大组件:Activity.Service.BroadcastReceiver.ContentProvider Activity组件用于对用户呈现操作界 ...
- android学习日记25--ANR和Hander消息机制
1.ANR(Application Not Responding)定义 在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:A ...
随机推荐
- Oracle ORA-00119和ORA-00132的解决方案
今天在启动服务器上的ORACLE时遇到如下错误: SQL> startup; ORA-00119: invalid specification for system parameter LOCA ...
- 《Python基础教程(第二版)》学习笔记 -> 第五章 条件、循环 和 其他语句
条件和条件语句 下面的值在作为布尔表达式的时候,会被解释器看作假(False):False None 0 "" () [] {} 条件执行和if语句 ...
- HTTP DNS小结
https://www.dnspod.cn/httpdns/guide HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求,绕开了运 ...
- linux操作系统cp命令
- In place Merge(原地归并)
数组al[0,mid-1] 和 al[mid,num-1],都分别有序.将其merge成有序数组al[0,num-1],要求空间复杂度O(1) 思路:一般的归并是需要O(n)的空间,而这里要求空间复杂 ...
- Algorithm: quick sort implemented in python 算法导论 快速排序
import random def partition(A, lo, hi): pivot_index = random.randint(lo, hi) pivot = A[pivot_index] ...
- shell文件/路径处理
#在此加上是不是目录的判断. if [ "`ls -A $dir`" = "" ]; then echo "$dir is empty" e ...
- python打包成exe(py2exe)
对比了几个打包工具,发现py2exe更好用一点,一个命令就可以. 1.获取 http://prdownloads.sourceforge.net/py2exe 下载python版本对应的.直接下载然后 ...
- Nullable问题
在代码中经常遇到int? 其实int?是Nullable<int>的简写方式. int到int?转化 int? i=null; int j=0; i=j; int?到int转化 ; int ...
- Camtasia Studio的安装步骤
总的来说: 1.安装 2.安装之后,进行汉化. 破解方法: 1):输入注册码安装 用户名:6-Y 注册码:GCABC-CPCCE-BPMMB-XAJXP-S8F6R 2):软件汉化 安装完成后使用汉化 ...