Android Activity 布局创建

01.前沿介绍

  • 大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与android中另外一个很重要的组件Service最大的不同,但是这个展示的界面的功能是Activity直接控制的么?界面的布局文件是如何加载到内存并被Activity管理的?android中的View是一个怎样的概念?加载到内存中的布局文件是如何绘制出来的?
  • 其实Activity对界面布局的管理是都是通过Window对象来实现的,Window对象,顾名思义就是一个窗口对象,而Activity从用户角度就是一个个的窗口实例,因此不难想象每个Activity中都对应着一个Window对象,而这个Window对象就是负责加载显示界面的。至于window对象是如何展示不同的界面的,那是通过定义不同的View组件实现不同的界面展示。
阅读更多

Android Activity 启动流程

01.Launcher启动开启Activity

  • 这个首先看LauncherActivity类中的onListItemClick方法

  • Launcher启动之后会将各个应用包名和icon与app的name保存起来,然后执行icon的点击事件的时候调用startActivity方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    Intent intent = intentForPosition(position);
    startActivity(intent);
    }

    protected Intent intentForPosition(int position) {
    ActivityAdapter adapter = (ActivityAdapter) mAdapter;
    return adapter.intentForPosition(position);
    }

    public Intent intentForPosition(int position) {
    if (mActivitiesList == null) {
    return null;
    }

    Intent intent = new Intent(mIntent);
    ListItem item = mActivitiesList.get(position);
    intent.setClassName(item.packageName, item.className);
    if (item.extras != null) {
    intent.putExtras(item.extras);
    }
    return intent;
    }
阅读更多

Android ActivityThread

启动Activity所属的应用进程

  • 大概流程如下所示

    ActivityManagerService.startProcessLocked()
    Process.start()
    ActivityThread.main()
    ActivityThread.attach()
    ActivityManagerNative.getDefault().attachApplication()
    ActivityManagerService.attachApplication()

阅读更多

Spring Boot 启动流程

前言

SpringApplication 启动过程主要包括两个阶段:

  • 初始化阶段
  • 启动阶段

一、初始化阶段

1
2
3
4
5
6
7
8
9
10
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
this.webApplicationType = deduceWebApplicationType();
setInitializers((Collection) getSpringFactoriesInstances(
ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
阅读更多

Java 项目启动时执行指定逻辑

1. Java自身的启动时加载方式

  • static代码块: static静态代码块,在类加载的时候即自动执行
  • 构造方法: 在对象初始化时执行。执行顺序在static静态代码块之后。

2.Spring启动时加载方式

阅读更多

Spring Boot 整合 RabbitMQ

一、基本概念

1.Message Queue

MQ全称(Message Queue)又名消息队列,是一种异步通讯的中间件。

  • 可以将它理解成邮局,发送者将消息传递到邮局,然后由邮局帮我们发送给具体的消息接收者(消费者),具体发送过程与时间我们无需关心,它也不会干扰我进行其它事情。
阅读更多