Android 基本原理&移动终端软件开发课程&StudyAccount7 2018.10.30

一、 Activity

1.Activity生命周期:
所有的Android组件都有它自己的生命周期,表示从这一组件的创建到销毁的整个过程。
在这一过程中,组件会在活动、非活动以及可见或不可见等状态中不断切换。
Activity一般处于4种状态:
Running、Paused、Stop、Killed
(运行、暂停、停止、销毁)
Activity 状态转换图

  • Active/Running
    Activity处于屏幕的最前端,用户完全可以看得到,并且可以与用户进行交互。
    对于Activity栈来说,它处于栈顶;(一次只有一个)
  • Paused
    Activity在屏幕上仍然可见,但是它已经失去了焦点,用户不能与之进行交互。
    暂停状态的Activity是存活的,仍然维持着其内部状态和信息,但是系统可能会在手机内存极低的情况下杀掉该Activity;
  • Stop
    Activity在屏幕上完全不能被用户看见。
    处于停止状态的Activity,系统仍然保留有其内部状态和成员信息,但是它经常会由于手机系统内存被征用而被系统杀死回收;
  • Killed
    Activity被系统杀死回收或者未启动。
    2.Activity生命周期的回调函数:
    onCreate(): 只在活动第一次被创建时被调用
    onStart(): 当活动由不可见变为可见时被调用
    onResume(): 在活动准备好与用户进行交互时调用
    onPause(): 系统准备去启动或恢复另一个活动时调用onStop(): 在活动完全不可见时被调用
    onDestroy(): 活动被销毁前调用
    onRestart(): 活动由停止状态变为运行状态前调用
  • 完整生存期:
    从onCreate()方法到onDestroy()方法
  • 可见生存期:
    从onStart()方法到onStop()方法
  • 前台生存期:
    从onResume()方法到onPause()方法
    小结:
    创建→运行 onCreate()–>onStart–>onResume();
    运行→停止 onPause()—>onStop();
    停止→运行 onRestart()–>onStart()—>onResume();
    运行→暂停 onPause();
    暂停→运行 onResume();
    停止→销毁 onDestory()

二、Intent(协助应用间的交互与通讯)

  • Intent负责对操作的动作、动作涉及数据、附加数据进行描述,根据此Intent的描述找到对应的组件,将 Intent传递给调用的组件,完成组件的调用。
  • Intent不仅可用于应用程序之间,也可用于Activity/Service之间的交互。
    1.Intent属性:
  • Action属性
    用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。
  • Data属性
    执行动作的Uri(Uniform Resource Identifier)和MIME(Multipurpose Internet Mail Extensions)类型
  • Category属性
    指明一个执行Action的分类,Intent中定义了一系列Category属性常量
  • Extra属性
    通过使用Intent对象的putExtra()方法来添加附加信息。
Intent intent=new Intent();
intent.putExtra("name","zhangsan");

通过使用Intent对象的getXXXExtra()方法可以获取附加信息。
例如,将上面代码存入Intent对象中的人名获取出来,因存入的是字符串,所以可以使用getStringExtra()方法获取数据,
String name=intent.getStringExtra("name");
2.Intent解析:
2.1 直接(显式)Intent
已经知道要启动的组件名称,通过直接指定组件来实现
常用方法有setComponent()、setClassName()或setClass()

Intent intent=new Intent();
intent.setClass(Activity1.this,Activity2.class);

2.2 间接(隐式)Intent
不知道要启动的组件名称,只知道一个Intent动作要执行,比如:拍照,录像。
通过Intent Filter过滤实现,根据Action、Data和Category属性进行匹配查找。
Intent过滤

  • 通过IntentFilter类生成;
  • 通过在配置文件AndroidManifest.xml中定义intent-filter>元素生成。
        <activity android:name="com.example.admin.activitylifedemo.Activity1">
            <intent-filter>//注册
                <action android:name="android.intent.action.MAIN" />//应用程序入口
                <category android:name="android.intent.category.LAUNCHER" />//该活动优先级最高
            </intent-filter>
        </activity>
  1. action>子元素
    一个intent-filter>中可以添加多个action>子元素。
    intent-filter>列表中的Action属性不能为空,否则所有的Intent都会因匹配失败而被阻塞。所以一个intent-filter>元素下至少需要包含一个action>子元素,这样系统才能处理Intent消息。
  2. category>子元素
    一个intent-filter>中也可以添加多个category>子元素,类似Action
    与Action一样,intent-filter>列表中的Category属性不能为空。Category属性的默认值"android.intent.category.DEFAULT"是启动Activity的默认值,在添加其他Category属性值时,该值必须添加,否则也会匹配失败。
  3. data>子元素
    一个中可以包含多个子元素,用于指定组件可以执行的数据

三、Activity跳转(四大组件都通过Intent来解析进行跳转)

在使用Intent进行Activity之间的跳转时,我们通常有三种Intent跳转方式,即:
1.不带参数的跳转

Intent intent=new Intent();
intent.setClass(Activity1.this,Activity2.class);
startActivity(intent);

2.带参数的跳转

Intent intent=new Intent();
Bundle bundle=new Bundle();
bundle.putString("Name","Kate");
bundle.putString("Age","25");
intent.putExtras(bundle);
intent.setClass(Activity1.this,Activity2.class);
startActivity(intent);

Activity1跳转到Activity2之后,Activity2通过Bundle获取Intent传过来的值

Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("Name");
String age=bundle.getString("Age");

3.带返回值的跳转
第一个页面传送返回值:

Intent intent=new Intent();
intent.setClass(Activity1.this,Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("参数","参数值");
intent.putExtra(bundle);
this.startActivityForResult(intent,0);

startActivityForResult(Intent intent,Int requestCode)
中requestCode用于识别第二个页面传回来的值
第二个页面:

Intent intent=new Intent();
Bundle bundle=new Bundle();
bundle.putString("参数","参数值");
intent.putExtra(bundle);
intent.setClass(Activity2.this,Activity1.class);
setResult(RESULT_OK,intent);
finish();

第一个页面接收返回值:

protected void onActivityResult(int requestCode,int resultCode,Intent data){
    switch (requestCode){//Activity1的请求标识
        //resultCode为回传的标记,在Activity2中使用的是RESULT_OK,所以此处选择case 0        
            if(resultCode==RESULT_OK){
                Bundle b=data.getExtras();
                String str=b.getString("参数"); 
            }
            break;
            default:
                break;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值