Android开发学习—— activity

activity生命周期

#Activity生命周期
###void onCreate()
* Activity已经被创建完毕
###void onStart()
* Activity已经显示在屏幕,但没有得到焦点
###void onResume()
* Activity得到焦点,可以与用户交互
###void onPause()
* Activity失去焦点,无法再与用户交互,但依然可见
###void onStop()
* Activity不可见,进入后台
###void onDestroy()
* Activity被销毁
###void onRestart()
* Activity从不可见变成可见时会执行此方法
###使用场景
* Activity创建时需要初始化资源,销毁时需要释放资源;或者播放器应用,在界面进入后台时需要自动暂停

###完整生命周期(entire lifetime)
onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory

###可视生命周期(visible lifetime)
onStart-->onResume-->onPause-->onStop

###前台生命周期(foreground lifetime)
onResume-->onPause

创建第二个activity
* 新创建的activity,必须在清单文件中做配置,否则系统找不到,在显示时会直接报错

<activity android:name="com.itheima.createactivity.SecondActivity"></activity>
* 只要有以下代码,那么就是入口activity,就会生成快捷图标

<intent-filter>
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

* 如果Activity所在的包跟应用包名同名,那么可以省略不写

创建activity的步骤:

1. 创建class类继承Activity
2. 创建布局文件,作为Activity的显示内容
3. 在清单文件中注册Activity

#Activity的跳转
>Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity

>通过设置Activity的包名和类名实现跳转,称为显式意图

>通过指定动作实现跳转,称为隐式意图

###显式意图
* 跳转至同一项目下的另一个Activity,直接指定该Activity的字节码即可

Intent intent = new Intent();
  intent.setClass(this, SecondActivity.class);
  startActivity(intent);
* 跳转至其他应用中的Activity,需要指定该应用的包名和该Activity的类名

Intent intent = new Intent();
  //启动系统自带的拨号器应用
  intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
  startActivity(intent);

###隐式意图
* 隐式意图跳转至指定Activity

Intent intent = new Intent();
  //启动系统自带的拨号器应用
     intent.setAction(Intent.ACTION_DIAL);
     startActivity(intent);
* 要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点

<intent-filter >
            <action android:name="com.itheima.second"/>
            <data android:scheme="asd" android:mimeType="aa/bb"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
 * action 指定动作(可以自定义,可以使用系统自带的)
 * data   指定数据(操作什么内容)
 * category 类别 (默认类别,机顶盒,车载电脑)
* 隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
* intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可
#####获取通过setData传递的数据

//获取启动此Activity的intent对象
  Intent intent = getIntent();
  Uri uri = intent.getData();

###显式意图和隐式意图的应用场景
* 显式意图用于启动同一应用中的Activity
* 隐式意图用于启动不同应用中的Activity
 * 如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统会显示一个对话框,列出所有匹配的Activity,由用户选择启动哪一个

#Activity跳转时的数据传递
* Activity通过Intent启动时,可以通过Intent对象携带数据到目标Activity
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("maleName", maleName);
        intent.putExtra("femaleName", femaleName);
        startActivity(intent);
* 在目标Activity中取出数据
        Intent intent = getIntent();
        String maleName = intent.getStringExtra("maleName");
        String femaleName = intent.getStringExtra("femaleName");

 ##内存不足
* 内存不足时,系统会优先杀死后台Activity所在的进程,都杀光了,如果内存还是不足,那么就会杀死暂停状态的Activity所在的进程,如果还是不够,有可能杀死前台进程
* 如果有多个后台进程,在选择杀死的目标时,采用最近最少使用算法(LRU)

###Activity任务栈
* 应用运行过程中,内存中可能会打开多个Activity,那么所有打开的Activity都会被保存在Activity任务栈
* 栈:后进先出,最先进栈,就会最后出栈

#Activity的四种启动模式
>每个应用会有一个Activity任务栈,存放已启动的Activity
>Activity的启动模式,修改任务栈的排列情况

* standard 标准启动模式
* singleTop 单一顶部模式
    * 如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
    * 应用场景:浏览器的书签
* singeTask 单一任务栈,在当前任务栈里面只能有一个实例存在
    * 当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
    * 应用场景:浏览器的activity
    * 如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码

* singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
    * 如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
    * 应用场景: 电话拨打界面

#横竖屏的切换

>默认情况下 ,横竖屏切换, 销毁当前的activity,重新创建一个新的activity
> 快捷键ctrl+F11

* Activity在横竖屏切换时会销毁重建,目的就是为了读取新的布局文件
在一些特殊的应用程序常见下,比如游戏,不希望横竖屏切换activity被销毁重新创建
需求:禁用掉横竖屏切换的生命周期
1. 横竖屏写死
        android:screenOrientation="landscape"
        android:screenOrientation="portrait"

2. 让系统的环境 不再去敏感横竖屏的切换。
    
         android:configChanges="orientation|screenSize|keyboardHidden"

#掌握开启activity获取返回值
###从A界面打开B界面, B界面关闭的时候,返回一个数据给A界面
步骤:
1. 开启activity并且获取返回值

startActivityForResult(intent, 0);
2. 在新开启的界面里面实现设置数据的逻辑
    
        Intent data = new Intent();
        data.putExtra("phone", phone);
        //设置一个结果数据,数据会返回给调用者
        setResult(0, data);
        finish();//关闭掉当前的activity,才会返回数据

3. 在开启者activity里面实现方法
        onActivityResult(int requestCode, int resultCode, Intent data)
        通过data获取返回的数据
4. 根据请求码和结果码确定业务逻辑

时间: 2024-10-11 00:16:12

Android开发学习—— activity的相关文章

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

【Android开发学习笔记】【第五课】Activity的生命周期-上

今天学习Activity当中的七个生命周期函数: 首先得说一个事情,就是在代码当中如果加入了 System.out.println(" ------");之后,如何查看这里面的输出内容 打开之后只输入“Filter Name”和“by Log Tag” 即可 添加成功后可以看到 本次学习主要总结如下: 1.onCreate() Acitivity首次创建时被调用.用于设置Acitivity的布局文件,绑定按钮监听器等一些普通静态操作. 2.onStart() Acitivity对用户可

【Android开发学习】【第二课】Activity学习(1)

什么是Activity,就是我们所看到的 需要理解以下四句话: 1.一个Activity就是一个类,并且这个类需要集成Activity: 2.需要重写OnCreat方法 3.每个Activity都需要在AndroidManifest.xml中进行配置 xml中加入了<intent-filter>说明应用程序启动时先运行这个Activity 4.为Activity添加必要的控件,就可以生成我们想要的界面 在res的layout下的xml就是布局文件 例如这样的: 代码: 效果: [Android

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

android 开发学习笔记 (一)

每个app 都有一个自己的 linux 进程: 每个进程都在自己的虚拟机里执行 两个app 可以跑在一个进程,一个vm里 android app 四大组件:activity,content provider,      services, broardcast receivers Content Resolver 激活 Content Provider You can start an      activity (or give it something new to do) by passi

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns: