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

概述

目标:

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

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

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

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

第5周:

  • Leetcode 142 题

    /**
    * 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周所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部