android开发艺术(七)之四大组件

1. 四大组件的运行状态

Activity

  • 类型:展示型组件。
  • 作用:展示一个界面并和用户交互。
  • 使用:
    • 需要在AndroidManifest中注册
    • 只有一种状态
    • 需要借助Intent启动,两种方式:
      • 显示Intent:
        Intent intent=new Intent(xxx.this,xxx.class); startActivity(intent);
      • 隐式Intent:
        Intent intent=new Intent(); intent.setAction(xxx); intent.addCategory(xxx); startActivity(intent);
  • 四种启动模式:
    standard:标准模式
    singleTop:栈顶复用模式
    singleTask:栈内复用模式
    singleInstance:单实例模式
  • 对用户而言是可见的,通过finish()结束一个Activity。

Service

  • 类型:计算型组件。

  • 使用:

    • 需要在AndroidManifest中注册。
    • 需要借助Intent启动:Intent intent = new Intent(xxx.this, xxx.class); startService(intent);
    • 两种运行状态:
      启动状态:通过startService()
      可以进行后台计算,并且不需要和外界有直接的交互,本身在主线程,耗时操作在独立线程;
      绑定状态:通过bindService()
      绑定状态既可以计算,也可以和外界进行通信
  • 用户无法感知,通过unBindService()stopService()完全停止一个Service。

BroadcastReceiver

  • 类型:消息型组件。
  • 作用:在不同的组件乃至不同的应用之间传递消息。
  • 使用:
    • 两种注册方式:
      动态注册:通过Context.registerReceiver()& Context.unRegisterReceiver(),必须要应用启动才能注册并接收广播。
      静态注册:在AndroidManifest文件中注册,在安装应用时就会被解析,不需要应用启动就可收到相应广播。
  • 需要借助Intent发送广播:Intent intent = new Intent("xxx"); sendBroadcast(intent);
  • 四种广播类型:
    普通广播 有序广播 本地广播 粘性广播
  • 用户无法感知,没有停止概念。

ContentProvider

  • 类型:数据共享型组件。
  • 作用:向其他组件乃至其他应用共享数据。它的内部需要实现增删改查操作,以便维持他内部的数据集合,数据集合的具体实现可以是数据库,也可以是list或map;
  • 使用:
    • 需要在AndroidManifest中注册。
    • 无需借助Intent启动。
  • 四种操作:增删改查需要处理好线程同步,因为这几个方法是在Binder线程池被调用的
    insert():添加数据 update():更新数据 delete():删除数据 query():查询数据
  • 用户无法感知,无需手动停止

2. Activity的工作流程

  • 最开始是Activity的startActivity,虽然有多个重载,但是最终会调用startActivityForResult方法
  • 接着是调用的Instrumentation的execStartActivity,并存在checkStartActlvityResult()检查异常
  • 启动是由ActivityManagerNative. getDefault()(AMS)startActivity实现的
  • AMS将活动的启动转移到ActivityStackSupervisorstartActivityMayWait
    在这里插入图片描述
  • RealStartActivityLocked使用app.Thread属于IApplicationThread,包含活动和服务的启动停止接口,实现了与活动和service启动停止相关的功能;
  • 最终实现类ApplicationThread,它通过scheduleLaunchActivity实现活动的启动。ApplicationThread.scheduleLaunchActivity() 将启动Activity的消息发送并交由Handler H处理
  • Handler 对消息的处理会调用handleLaunchActivity()->performLaunchActivity()得以最终完成Activity的创建和启动。performLaunchActivity主要实现:
  1. 从ActivityClientRecord中获取待启动的Activity的组件信息

  2. 通过Instrumentation的newActivity方法使用类加载器创建Activity对象,其中Instrumentation中的newActivity方法,就是通过反射的反射创建Activity对象

  3. 通过LoadedApk的makeApplication方法来尝试创建Application对象

  4. 创建ContextImpl对象并通过Activity的attach方法来完成一些重要的数据初始化

  5. 通过Instrument调用Activity的onCreate方法回调

前辈学习借鉴博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值