我是靠谱客的博主 平淡凉面,这篇文章主要介绍Android工程师之ARTS挑战第六期第5周,现在分享给大家,希望可以做个参考。

目标:

  1. 每周至少做一个 leetcode 的算法题

  2. 阅读并点评至少一篇英文技术文章

  3. 学习至少一个技术技巧

  4. 分享一篇有观点和思考的技术文章

第5周:

  • Leetcode 142 题

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { if (head == null || head.next == null || head.next.next == null) { return null; } ListNode fast = head.next.next; ListNode slow = head.next; // while (true) { // if (fast == null || fast.next == null) // return null; // 说明没有环 // else if (fast == slow || fast.next == slow) { // // 说明有环 // return slow; // } else { // fast = fast.next.next; // slow = slow.next; // } // } while (fast != slow) { if (fast.next == null || fast.next.next == null) { return null; } else { fast = fast.next.next; slow = slow.next; } } //说明有环 fast = head; while (fast != slow) { fast = fast.next; slow = slow.next; } return slow; } }
  • 学习至少一个技术技巧

    Android体系结构

    [外链图片转存失败(img-hjBN4Fkx-1566615246130)(images/android-boot-6363546.jpg)]

    图解: Android系统启动过程由上图从下往上的一个过程:Loader -> Kernel -> Native -> Framework -> App

    Android系统启动过程

    [外链图片转存失败(img-WT0mMknZ-1566615246131)(images/android-booting.jpg)]

    序号进程启动概述
    1init进程Linux系统中用户空间的第一个进程, Init.main
    2zygote进程所有App进程的父进程, ZygoteInit.main
    3system_server进程系统各大服务的载体
    4servicemanager进程binder服务的大管家, 守护进程循环运行在binder_loop
    5app进程通过Process.start启动App进程, ActivityThread.main

    AMS

    AMS启动

    • 在system_server进程中启动
    • SystemServer.java #startBootstrapServices()
    • 创建AMS实例对象,创建Andoid Runtime,ActivityThread和Context对象;
    • setSystemProcess:注册AMS、meminfo、cpuinfo等服务到ServiceManager;
    • installSystemProviderss,加载SettingsProvider;
    • 启动SystemUIService,再调用一系列服务的systemReady()方法;
    • 发布Binder服务
    服务名类名功能
    activityActivityManagerServiceAMS
    procstatsProcessStatsService进程统计
    meminfoMemBinder内存
    gfxinfoGraphicsBinder图像信息
    dbinfoDbBinder数据库
    cpuinfoCpuBinderCPU
    permissionPermissionController权限
    processinfoProcessInfoService进程服务
    usagestatsUsageStatsService应用的使用情况

    想要查看这些服务的信息,可通过dumpsys <服务名>命令。比如查看CPU信息命令dumpsys cpuinfo

    从设计模式的角度:动态代理模式

    API 23源码为例:

    [外链图片转存失败(img-bahaQ45b-1566615246131)(images/ams_uml-6435169.png)]

  • 分享一篇有观点和思考的技术文章

    • https://www.jianshu.com/p/3988699ad131
  • 阅读并点评至少一篇英文技术文章

    • https://medium.com/@mjpeyman.arab/android-modularization-hexagonal-architecture-with-kotlin-and-mvvm-part-1-db338833d6c2 一遍介绍Android新的架构的博文 六芒星架构

最后

以上就是平淡凉面最近收集整理的关于Android工程师之ARTS挑战第六期第5周的全部内容,更多相关Android工程师之ARTS挑战第六期第5周内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部