快速掌握 android activity工作流

写在前面: 本片文章只是记录了自己学习时的一些笔记,纯粹是为了自己后面方便查找,片言碎语,不适合大家浏览,请大家不要参考这篇文章。

正文:

1、Activity概念和简单使用
    
    (1)、概念:Activity是一个可视化的用户界面,负责创建一个屏幕窗口,放置UI组件,供用户交互。
    (2)、用法:创建Activity类;
         在AndroidManifest.xml中注册;
         设置布局文件
    
2、Activity基本配置

    (1)、AndroidMainfest.xml 文件:它是应用程序的清单文件,每个应用都必须包含,位于应用根目录下。
                作用:
                    描述了程序的基本属性;
                    描述应用需要使用的权限信息;
                    描述包含的应用组件(activity、service、broadcast等)的实现类
    (2)、AndroidMainfest.xml 内容
            xmlns: xml+ns,ns:name space
            application 节点
                icon:应用程序的图标
                label:应用程序的名称
                theme:应用程序的主题
            activity 节点
            
            intent-filter 意图过滤节点
            
3、Activity启动方法

    (1)、显式启动:明确指定要启动的Activity的class或者包名.activity类名
            方式一:class跳转
                    Intent intent = new Intent(Activity1.this,Activity2.class);
                    startActivity(intent);
                    
            方式二:包名.类名跳转
                    Intent intent = new Intent();
                    intent.setClassName(context,"com.example.activitylesson1");
                    startActivity(intent);
            
            方式三: ComponentName 跳转
                    Intent intent = new Intent();
                    intent.setComponent(new Component(context,Activity2.class));
                    startActivity(intent);
            
    (2)、隐式启动:设置启动过滤器,通过指定的action或action和data属性,系统会查找符合条件的activity,并启动它。
    
            方式一: 构造时传入action name
                    Intent intent = new Intent("com.example.activitylesson1");
                    startActivity(intent);
                    
            方式二:构造完成后设置action name
                    Intent intent = new Intent();
                    intent.setAction("com.example.activitylesson1");
                    startActivity(intent);
        
         如果自己定义的某个Activity要通过隐式启动,在AndroidManifest.xml必须加上android.intent.category.DEFAULT,否则不起作用。
                    

4、Activity显式隐式启动
        
    (1)、Action: 代表系统中已经定义的一系列常用的动作,属性的值是一个字符串,通过setAction()方法或在清单文件AndroidManifest.xml中设置
                 当有多个Action匹配隐式启动的条件时,将会弹出选择框。
        
    (2)、Category:
                指定当前动作(Action)被执行的环境;
                通过addCategory()方法或者在清单文件AndroidManifest.xml中设置
            常用值:
                android.intent.category.LAUNCHER
                    设置该组件为在当前应用程序启动器,通常为入口ACTION_MAIN配合使用
                android.intent.category.DEFAULT
                    Android系统中默认的执行方式,按照普通Activity的执行方式执行
    
    (3)、需要隐式启动的Activity必须标记category为android.intent.category.DEFAULT
        
         android.intent.category.LAUNCHER 标记的Activity将会作为app的启动器显示在手机桌面图标上,通常和Action.Main一起使用
    
5、Activity生命周期

    (1)、单个Activity的生命周期
            生命开始:
                onCreate() : 创建activity时调用
                onStart()  :当activity界面变为用户可见时调用
                onResume() :当activity界面获取到焦点时调用(界面按钮可点击、文本框可输入)
            生命结束:
                onPause()  :当activity失去焦点时调用(按钮不可点、文本框不能输入)
                onStop()   :当activity变为不可见时调用     
                onDestory(): 当activity被销毁时调用
                
            onRestart:当activity再次启动时调用
            
6、加载模式
    
    (1)、启动模式:决定生成新的Activity实例是否重用已存在的Activity实例,是否和其他的Activity实例公用一个task里。
         Task: task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。
        
    (2)、四种启动模式
        standard:默认的启动模式,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈。
        singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都需要创建Activity实例。
        singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把该Activity放入栈顶,并把该Activity以上的Activity实例都出栈。
        singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
        
    (3)、配置方法
         在mainfest文件中Activity节点里添加属性android:launchMode="standard"
        
7、IntentFlag
    
    (1)、task是一个具有栈结构的容器,可以存放多个Activity实例;
         启动一个应用,系统就会为之创建一个task,来放置根Activity;
         一个Activity启动另一个Activity时,两个Activity放置在同一个task中,后者被压入前者所在的task栈,当用户按下后退键,后者从task弹出,前者又显示在幕前。
        
    (2)、Android:TaskAffinity
            指出了它所希望进入的task;
            如果一个Activity没有显式的指出该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity;
            如果Application也没有指明,那么该taskAffinity的值就等于包名;
            Task也有自己的affinity属性,它的值等于它的根Activity的taskAffinity的值。
            
    (3)、IntentFlag的常用值
            FLAG_ACTIVITY_NEW_TASK:
                系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity
            与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskAffinity,将目标Activity放置于此task。
                Intent intent = new Intent();
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            
            FLAG_ACTIVITY_SINGLE_TOP
                当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例。
                
            FLAG_ACTIVITY_CLEAR_TOP
                如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈。
            
            FLAG_ACTIVITY_REORDER_TO_FRONT
                如果栈里已经存在,则将他拿到栈顶,不会启动新Activity,也会将该Activity以上的Activity实例出栈。
        
        
8、Intent传参
    
    (1)、第一种: Intent.putExtra(String name,数据类型 value)
    (2)、Bundle传递:
    (3)、复杂数据传递:
                有两种方式:第一种、Serilziable 把需要传递的类实现Serilziable接口
                            第二种、Parceable 把需要传递的类实现Parceable接口
        
9、Activity数据回传
        
    (1)、第一个activity启动第二个activity:startActivityForResult(intent)
    
    (2)、第二activity结束的时候回回调:onActivityResult ,第二个activity可以通过setResult来传递参数
        
10、启动系统的Activity组件
        
    (1)、拨打电话界面: intent.setAction(Intent.ACTION_DIAL);
                       startActivity(intent);
                    权限: <uses-permission android name:=" android.permission.CALL_PHONE"/>
        
    (2)、发送短信界面: intent.setAction(Intent.ACTION_SENDTO);
                       Uri smsToUri = Uri.parse("smsto:"+"10086");
                       intent.setData(smsToUri);
                       intent.putExtra("sms_body","短信的内容");
                       startActivity(intent);
                    权限: <uses-permission android name:=" android.permission.SEND_SMS"/>
    
    (3)、打开相机界面: intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivity(intent);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值