• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • UI繪制流程詳解(1)

    標簽: Android  UI  源碼分析

    從源碼角度分析一下三個問題

     

    本文主要研究第一個問題

    一、Android程序是如何啟動,Activity生命周期如何調用

    Android程序使用Java語言實現的,而Java程序的執行需要一個主入口main方法,Android程序的main方法就存在于ActivityThread的這個類當中。從字面意義上可以知道,ActivityThread是一個線程類,也就是我們所說的主線程

    在main方法中出在如下代碼

    這里主要是進行了ActivityThread類的創建及綁定,點擊進入attach方法中進行查看,我們只查看核心的代碼

    點擊進入getService方法

    了解Binder機制的小伙伴看到這里應該很眼熟,在圖中的create方法中進行了一個跨進程的相關操作

    1. 獲得系統的IBinder的實現類
    2. 將系統(服務端)的Binder對象轉換成客戶端可以使用的接口類對象

    也就是說getService這個方法所返回的對象其實就是和系統進行跨進程通信的,從對象的類名稱可知是Activity的管理類。mgr通過attachApplication方法和mAppThread進行了綁定,mAppThread的類是ApplicationThread,父類為IApplicationThread.Stub,和Binder中的Stub的作用一樣,用來接收系統(服務端)發過來的跨進程消息。而這個類中大部分方法以schedule開頭,可以找到很多比較眼熟的方法名稱,比如schedulePauseActivity,scheduleStopActivity,scheduleResumeActivity,scheduleLaunchActivity等,scheduleLaunchActivity是開始的方法,里面有兩行比較重要的代碼

    ActivityClientRecord r = new ActivityClientRecord();
    
    
    sendMessage(H.LAUNCH_ACTIVITY, r);
    1. ActivityClientRecord中封裝了Activity的對象,暫時可以把它當做Activity
    2. ApplicationThread中的方法中都包含了sendMessage方法,通過Handler機制將相應的Object發送到了handleMessage方法中

    ActivityThreadl類中的handleMessage方法如下:

    里面包含了很多Activity對應的狀態,這里我們之研究LAUNCH_ACTIVITY這個啟動的狀態。點擊進入handleLaunchActivity方法

    再次進入performLaunchActivity,其他代碼不看,暫時之研究啟動的相關代碼

    發現在performLaunchActivity方法中存在OnCreate相關的方法,在這里基本可以知道,會執行到Activity方法中的OnCreate方法中

    到這里,關于Android程序是如何啟動,Activity生命周期如何調用的流程基本捋清。

    歡迎留言,歡迎糾錯,共同進步!

    版權聲明:本文為qq_32019367原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_32019367/article/details/81134396

    智能推薦

    Android高級UI之繪制流程分析

    要了解繪制流程,首先我們要了解View的加載過程,我們從setContentView開始 MainActivity->Activity 我們可以看到是通過getWindow()來進行setContentView,getWindow()到底是什么呢,我們進行源碼跟蹤,定位Window 我們可以發現Window是一個抽象類,它有唯一一個子類就是PhoneWindow,因此我們setContent...

    Android UI繪制流程及原理

    1.前言 2.View是如何添加到屏幕窗口上的 要弄清楚UI繪制流程和原理,我們首先要了解的就是View是如何被添加到屏幕窗口上的。帶著這個問題我們來進行源碼分析,關于界面的展示,立馬浮現在腦海的就是這樣一段代碼: 通過傳入布局資源ID,setContentView方法又做了什么事情呢?經過一系列線索最終找到了的位置也就是Window的唯一實現類PhoneWindow: 注釋1處installDe...

    Android UI繪制流程之測量片

    經過前一片前奏的分析,我們知道從ViewRootImpl的performTraversals方法正式進入View的測量、布局、繪制流程。本文著重分析View的measure流程。直接上代碼吧 frameworks/base/core/java/android/view/ViewRootImpl.java 在performTraversals方法中找到測量相關的邏輯代碼注釋1處的performMea...

    (一)UI繪制流程-源碼分析

    版權聲明:本文為博主原創文章,未經博主允許不得轉載。 本文純個人學習筆記,由于水平有限,難免有所出錯,有發現的可以交流一下。 一.setContentView(int layoutResID) 在自定義的 Activity 類中調用 setContentView()方法,會調到 安卓 SDK 的 Activity 類中的 setContentView()方法。 在 Activity 類中的加載我們...

    (四)UI繪制流程-瀑布流布局

    版權聲明:本文為博主原創文章,未經博主允許不得轉載。 本文純個人學習筆記,由于水平有限,難免有所出錯,有發現的可以交流一下。 一.前言 上一篇給出了流式布局,這里再來一篇瀑布流布局練手,同時代碼稍微簡潔一些。不再利用封裝類來保存數據,直接把子 View 的四個邊沿保存在對應的 LayoutParams 中。 二、分析 1.generateLayoutParams()獲取封裝子 View 的左上右下...

    猜你喜歡

    王學崗高級UI一——————UI繪制流程(上)

    簡書資料地址 https://www.jianshu.com/p/f55467033146 https://www.jianshu.com/p/fc717b47b322 第一app的啟動之Application的創建 程序的啟動就是應用進程(app)和系統進程(SystemServer)的通信。主要是跟系統進程中的AMS通信。應用進程中的四大組件(以Activity為例),系統進程(主要是AMS)...

    一 UI繪制流程及原理(Android UI )

    在了解繪制原理之前,我們首先了解一下View視圖結構 1. Android UI View視圖結構 View是如何被添加到屏幕窗口上? 1.1 平常代碼中使用如下方式添加布局xml到Activity或Fragment中 1.2 接1.1場景下,接下來在Activity中會調用如下代碼段 1.3 我們知道Window只有一個唯一子類實現:android.view.PhoneWindow 接下來我們查...

    3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習

    3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 自學資源 作業內容 1、基本操作演練【建議做】 天空盒的制作: 地圖的制作: 整體效果: 2、編程實踐 項目要求: 項目結構: 代碼詳解: Actions: ISSActionCallback.cs SSAction.cs SSAction...

    FlycoTabLayout 的使用

    FlycoTabLayout 一個Android TabLayout庫,目前有3個TabLayout SlidingTabLayout:參照PagerSlidingTabStrip進行大量修改. 新增部分屬性 新增支持多種Indicator顯示器 新增支持未讀消息顯示 新增方法for懶癌患者 CommonTabLayout:不同于SlidingTabLayout對ViewPager依賴,它是一個不...

    爬蟲項目實戰八:爬取天氣情況

    爬取天氣情況 目標 項目準備 接口分析 代碼實現 效果顯示 寫入本地 目標 根據天氣接口,爬取接下來一周的天氣情況。 項目準備 軟件:Pycharm 第三方庫:requests,BeautifulSoup,csv 接口地址:http://api.k780.com:88/?app=weather.future&weaid=城市名&appkey=10003&sign=b59bc...

    精品国产乱码久久久久久蜜桃不卡