導航:首頁 > 操作系統 > android程序啟動界面

android程序啟動界面

發布時間:2023-04-04 13:30:24

android開發 一開始打開的類似於歡迎頁面叫什麼

這個界面主要的作用有:

  1. 這個界面是為了讓app有更好的體驗,不會讓用戶感覺太突兀了,所以現在app市場包括ios的應用基本都是有歡迎界面的。

  2. 這個界面一般稱為啟動頁面,在android開發中,開發者可以設定在該界面的停留時間,從而可以在後台進行一些初始化的工作的。

② 安卓12游戲啟動顯示動畫圖標

Android12添加了SplashScreenAPI,它可為所有應用啟用新的應用啟動動畫。應用可以通過多種方式來定製啟動畫面,以彰顯其獨有的品牌個性。
啟動畫面的工作原理:出現的場景:
開機第一次啟動應用
用戶殺死進程
系統回收了應用內存(進程被殺死)。
就是應用程序的進程不存在或被殺死,用戶再次打開應用就會啟動這個啟動畫面。
啟動畫面載入結束後,顯示我們的Activity(MAIN)界面。
關於應用啟動模式可以參考:Android性能優化之啟動優化。
動畫的元素和機制:它們由窗口背景(4)、應用圖標(1)(靜態動態兩種)、圖標背景(3)還有底部的圖片(谷歌不推薦使用)組成。

③ Android 從點擊應用圖標到界面顯示的過程

[轉] 一篇文章看明白 Android 從點擊應用圖標到界面顯示的過程 (遵循CC 4.0 BY-SA版權協議)

從點擊桌面應用圖標到應用顯示的過程我們再熟悉不過了,下面我們來分析下這個過程都做了什麼。

本文主要對以下問題分析:

如不了解 Android 是如何從開機到 Launcher 啟動的過程,請先閱讀 Android - 系統啟動過程

我們知道 Android 系統啟動後已經啟動了 Zygote,ServiceManager,SystemServer 等系統進程;ServiceManager 進程中完成了 Binder 初始化;SystemServer 進程中 ActivityManagerService,WindowManagerService,PackageManagerService 等系統服務在 ServiceManager 中已經注冊;最後啟動了 Launcher 桌面應用。

其實 Launcher 本身就是一個應用程序,運行在自己的進程中,我們看到的桌面就是 Launcher 中的一個 Activity。

應用安裝的時候,通過 PackageManagerService 解析 apk 的 AndroidManifest.xml 文件,提取出這個 apk 的信息寫入到 packages.xml 文件中,這些信息包括:許可權、應用包名、icon、apk 的安裝位置、版本、userID 等等。packages.xml 文件位於系統目錄下/data/system/packages.xml。

同時桌面 Launcher 會為安裝過的應用生成不同的應用入口,對應桌面上的應用圖標,下面分析點擊應用圖標的到應用啟動的過程。

點擊 Launcher 中應用圖標將會執行以下方法

在 system_server 進程中的服務端 ActivityManagerService 收到 START_ACTIVITY_TRANSACTION 命令後進行處理,調用 startActivity() 方法。

從 Launcher 點擊圖標,如果應用沒有啟動過,則會 fork 一個新進程。創建新進程的時候,ActivityManagerService 會保存一個 ProcessRecord 信息,Activity 應用程序中的AndroidManifest.xml 配置文件中,我們沒有指定 Application 標簽的 process 屬性,系統就會默認使用 package 的名稱。每一個應用程序都有自己的 uid,因此,這里 uid + process 的組合就可以為每一個應用程序創建一個 ProcessRecord。每次在新建新進程前的時候會先判斷這個 ProcessRecord 是否已存在,如果已經存在就不會新建進程了,這就屬於應用內打開 Activity 的過程了。

進程創建成功切換至 App 進程,進入 app 進程後將 ActivityThread 類載入到新進程,並調用 ActivityThread.main() 方法

此時只創建了應用程序的 ActivityThread 和 ApplicationThread,和開啟了 Handler 消息循環機制,其他的都還未創建, ActivityThread.attach(false) 又會最終到 ActivityMangerService 的 attachApplication,這個工程其實是將本地的 ApplicationThread 傳遞到 ActivityMangerService。然後 ActivityMangerService 就可以通過 ApplicationThread 的代理 ApplicationThreadProxy 來調用應用程序 ApplicationThread.bindApplication,通知應用程序的 ApplicationThread 已和 ActivityMangerService 綁定,可以不藉助其他進程幫助直接通信了。此時 Launcher 的任務也算是完成了。

在 system_server 進程中的服務端 ActivityManagerService 收到 ATTACH_APPLICATION_TRANSACTION 命令後進行處理,調用 attachApplication()。

發送送完 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,還會發送 BIND_APPLICATION_TRANSACTION 命令來創建 Application。

在 app 進程中,收到 BIND_APPLICATION_TRANSACTION 命令後調用 ActivityThread.bindApplication()。

ApplicationThreadProxy.bindApplication(…) 會傳來這個應用的一些信息,如ApplicationInfo,Configuration 等,在 ApplicationThread.bindApplication 里會待信息封裝成AppBindData,通過

將信息放到應用里的消息隊列里,通過 Handler 消息機制,在 ActivityThread.handleMeaasge 里處理 H.BIND_APPLICATION 的信息,調用 AplicationThread.handleBindApplication。

Instrumentation:

這時 Application 就創建好了,這點很重要,很多資料里說 Application 是在performLaunchActivity() 里創建的,因為 performLaunchActivity() 也有mInstrumentation.newApplication 這個調用,newApplication() 函數中可看出會先判斷是否以及創建了 Application,如果之前已經創建,就返回已創建的 Application 對象。

上面 fork 進程時會發送 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,在 app 進程中,收到 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令後調用 ApplicationThread.scheleLaunchActivity()。

與 Window 進行關聯,具體過程詳見: Activity,Window,View 之間的關系

Activity 的整體啟動流程如圖所示:

④ 手機卡在android正在啟動界面了怎麼辦

你應該是桌面丟了~沒桌面進不了。找個電腦下個360的桌面~文件不會丟~什麼東西都 在~就是和以前的桌滿風格不一樣。(不相信用手機~設置~ 找桌面)

⑤ android 啟動頁閃黑屏怎麼解決比較好

閃黑屏的原因主要是我們啟動Activity的時候,需要跑完onCreate和onResume才會顯示界面 前幾天Boss就反應說,機器每次啟動程序都會閃一下黑屏,這個客戶不接受。沒辦法,只能想想怎麼解決,最後找到了下面的方法。閃黑屏的原因主要是 我們啟動Activity的時候,需要跑完onCreate和onResume才會顯示界面。也就是說需要處理一些數據後,才會顯示。按照這種思路,是不 是我把初始化的工作盡量減少就可以避免黑屏?事實是,就算你onCreate啥都不做,仍然會閃一下黑屏,因為初始化解析界面時需要一定時間。下面是解決 辦法: 1、自定義Theme 復制代碼 代碼如下: 設置背景圖Theme <style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item> </style> //2、設置透明Theme <style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style> 上面我定義了兩種Theme,第一種Theme就是設置一張背景圖。當程序啟動時,首先顯示這張背景圖,避免出現黑屏。第二種Theme是把樣式設置為透明,程序啟動後不會黑屏而是整個透明了,等到界面初始化完才一次性顯示出來。下面說說兩種方式的優缺點: •Theme1 程序啟動快,界面先顯示背景圖,然後再刷新其他界面控制項。給人刷新不同步感覺。 •Theme2 給人程序啟動慢感覺,界面一次性刷出來,刷新同步。 2、修改AndroidManifest.xml 為了使上面Theme生效,我們需要設置一些Activity的Theme 復制代碼 代碼如下: <application android:allowBackup="true" android:icon="@drawable/ipod_icon" android:label="@string/app_name" android:launchMode="singleTask"> <!-- iPod主界面 --> <activity android:name="com.apical.apicalipod.IPodMainActivity" <!-- 使用上面定義的樣式 mythou--> android:theme="@style/Theme.AppStartLoad" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //...... </application> •可以在Activity裡面增加上面自定義的樣式。另外在Application裡面增加也是可以的,而且是全局效果。 •自定義Theme放在 /res/values/styles.xml 裡面。如果沒有這個文件,自己添加一個即可。 •如果存在多個Activity切換,中間也可能會存在短暫黑屏問題。原因也是Activity啟動的時候需要初始化載入數據,如果想避免這種情況,可以在你切換的Activity裡面增加上面的樣式。 •上面兩種樣式都可以避免黑屏。可以實際測試一下你的程序選擇一種效果。 •這個只是把黑屏避免了,但是如果你程序初始化啟動慢,還是會給人程序啟動慢的感覺。需要自行優化程序初始化過程。 3、Theme屬性詳解 復制代碼 代碼如下: android:theme="@android:style/Theme.Dialog" //Activity顯示為對話框模式 android:theme="@android:style/Theme.NoTitleBar" //不顯示應用程序標題欄 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不顯示應用程序標題欄,並全屏 android:theme="Theme.Light " //背景為白色 android:theme="Theme.Light.NoTitleBar" //白色背景並無標題欄 android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標題欄,全屏 android:theme="Theme.Black" //背景黑色 android:theme="Theme.Black.NoTitleBar" //黑色背景並無標題欄 android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標題欄,全屏 android:theme="Theme.Wallpaper" //用系統桌面為應用程序背景 android:theme="Theme.Wallpaper.NoTitleBar" //用系統桌面為應用程序背景,且無標題欄 android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系統桌面為應用程序背景,無標題欄,全屏 android:theme="Theme.Translucent" //透明背景 android:theme="Theme.Translucent.NoTitleBar" //透明背景並無標題 android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景並無標題,全屏 android:theme="Theme.Panel " //面板風格顯示 android:theme="Theme.Light.Panel" //平板風格顯示 4、Theme和Style Android裡面除了Theme外還有Style,例如下面是Launcher裡面配置workspace的一個Style 復制代碼 代碼如下: <style name="WorkspaceIcon"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_gravity">center</item> <item name="android:gravity">center_horizontal</item> <item name="android:singleLine">true</item> <item name="android:ellipsize">marquee</item> <item name="android:textSize">12sp</item> <item name="android:textColor">#FFF</item> <item name="android:shadowRadius">2.0</item> <item name="android:shadowColor">#B0000000</item> </style> Style可以理解為一組屬性集合,方便不同的View設置使用,我們在View裡面使用Style的時候,跟使用Theme是一樣的應用方法。那麼Style和Theme有什麼區別? 下面列出兩者區別: •樣式用在單獨的View,如:Button、TextView等 •主題通過AndroidManifest.xml中的<application>和<activity>用在整個應用或者某個 Activity,主題對整個應用或某個Activity存在全局性影響。 •如果一個應用使用了主題,同時應用下的view也使用了樣式,那麼當主題與樣式屬性發生沖突時,樣式的優先順序高於主題。 上面就是通過Theme解決程序啟動閃黑屏問題,並且講解了Theme和Style,通過Theme配置,其實還可以做個歡迎頁面。不過我們都希望程序啟動速度越快越好,因此還是需要多多優化自己的程序。

⑥ Android應用程序啟動流程總結

AMS主要功能:
AMS是Android中最核心的服務,主要負責系統中四大組件的啟動、切換、調度及應用進程的管理和調度等工作。還負責啟動或殺死應用程序的進程。

WMS主要功能:
為所有窗口分配Surface。
管理Surface的顯示順序、尺寸、位置。
管理窗口動畫。
輸入系統相關:WMS是派發系統按鍵和觸摸消息的最佳人選,當接收到一個觸摸事件,它需要尋找一個最合適的窗口來處理消息。

PWS主要功能:
PMS 用來管理跟蹤所有應用APK,包括安裝,卸載,解析,控制許可權等。

SystemServer也是一個進程,包括AMS、PMS、WMS等等。

zygote意為「受精卵「。Android是基於Linux系統的,而在Linux中,所有的進程都是由init進程直接或者是間接fork出來的,zygote進程也不例外。

App進程是用戶點擊桌面icon時,通過Launcher進程請求SystemServer,再調用Zygote孵化的。

①點擊啟動一個App,Launcher進程採用Binder IPC向ActivityManagerService發起startActivity請求;

②ActivityManagerService接收到請求後,向zygote進程發送創建進程的請求;

③Zygote進程fork出新的子進程,即App進程;

④App進程通過Binder IPC向sytem_server進程發起綁定Application請求;

⑤system_server進程在收到請求後,進行一系列准備工作後,再通過binder IPC向App進程發送scheleLaunchActivity請求;

⑥App進程的binder線程(ApplicationThread)在收到請求後,通過handler向主線程發送LAUNCH_ACTIVITY消息;

⑦主線程在收到Message後,通過發射機制創建目標Activity,並回調Activity.onCreate()等方法。

⑧到此,App便正式啟動,開始進入Activity生命周期,執行完onCreate/onStart/onResume方法,UI渲染結束後便可以看到App的主界面。

備註:
Launcher,PMS,Zygote,App進程是三個獨立的進程,相互通信就需要使用進程間通信機制。與Zygote通信是使用的socket通信,Launcher,PMS,App進程間使用的是Binder機制。

⑦ 一、Android App啟動圖啟動界面的簡單實現

創建一個Splash activity

對應一個xml,我直接把圖片作為背景處理,這樣可以直接將圖片裁剪好,不用另外處理。

去Androidmanife設置最先載入

去style里去除titlebar實現全屏效果

閱讀全文

與android程序啟動界面相關的資料

熱點內容
如何查看電腦系統伺服器ip地址查詢 瀏覽:389
把文件夾設鎖 瀏覽:570
命令行語句 瀏覽:218
企友3e財務如何連接伺服器 瀏覽:984
華為手機如何刪除卸載app殘留數據 瀏覽:543
rpm的命令作用 瀏覽:365
如何查看網站的伺服器時間 瀏覽:850
編譯局和人民出版社 瀏覽:652
java泛型extends 瀏覽:326
頭條程序員教學 瀏覽:772
安卓合並什麼意思 瀏覽:530
linux在光碟引導 瀏覽:537
imap伺服器地址怎麼查 瀏覽:654
作曲教程pdf 瀏覽:506
pr怎麼壓縮文件大小 瀏覽:863
查看oracle字元集命令 瀏覽:179
鋰電池增加密度 瀏覽:661
linux用戶密碼忘記 瀏覽:242
gb壓縮天然氣 瀏覽:635
圖片拼接不壓縮app 瀏覽:670