1. android app啟動動畫是怎樣製作的
Android的開機動畫,開始頁面並非MainActivity,而是在另外一個頁面(就是開機的那幅圖[xml裡面寫])停留2秒(時間自定 ),然後再跳轉到MainActivity頁面即可.
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acty_appstart);
new Handler().postDelayed(new Runnable() {
@Override public void run() {
if (!AppStart.this.isFinishing()) {
Intent intent = new Intent(this,MainActivity.class);//2秒之後跳轉到主界面執行
startActivity(intent);
AppStart.this.finish();
}
}
}, 2000);
}
2. android 系統怎麼啟動app的
啟動你自己編寫的app有2種方式:一種是安裝模擬器,啟動時選擇該模擬器啟動,模擬器會安裝該APP,第二種是真機調試,需要的是安卓系統的手機,用數據線連接電腦,打開調試模式,運行android編輯器,它會把app安裝到你得手機上
3. Android 啟動流程圖 (一)
閱讀順序,
先看Binder機制, 接著對照此圖看ServiceManager的啟動和獲取,
先了解基礎啟動流程, 後面的文章都會再次基礎上進行增加, 例如AMS的啟動和注冊等.
4. 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機制。
5. 手機app怎麼製作流程圖
操作方法
01
准確的產品定位是製作手機app的前提條件。企業如何正確的為企業app定位是最為關鍵的,這樣決定著app能夠為企業創造多大的利潤。
02
有了正確定位的app,之後就是功能需要整理的階段。客戶對自己企業產品有了正確的分析,就可以確定app需求。
03
在需求整理完整的情況下,app開發公司就可以對app進行產品的原型設計,也就是UE設計。企業和開發公司之間會針對產品的原型進行溝通,最終將產品原型確定。
04
app原型確定之後,就進入app設計階段。app設計是其中至關重要的一部分。app設計是直觀上給用戶第一的視覺體驗。
05
在這些前期的准備工作完成後,正式進入app原生代碼開發階段。無論是Android還是iOS版本,開發都是要在前期的UE、UI完全確定的情況下進行的。
06
app開發代碼完成後,就交專門的測試部門進行測試,對其中出現的bug進行修改。最終完全交付給客戶。值得注意的是,原生代碼開發的app在交付時,代碼是一定要交給客戶的。反之,如果是一些模板開發是沒有代碼交付這一步驟。
6. android app啟動動畫是怎樣製作的
Android的開機動畫,開始頁面並非MainActivity,而是在另外一個頁面(就是開機的那幅圖[xml裡面寫])停留2秒(時間自定 ),然後再跳轉到MainActivity頁面即可.
java">@OverrideprotectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.acty_appstart);
newHandler().postDelayed(newRunnable(){
@Overridepublicvoidrun(){
if(!AppStart.this.isFinishing()){
Intentintent=newIntent(this,MainActivity.class);//2秒之後跳轉到主界面執行
startActivity(intent);
AppStart.this.finish();
}
}
},2000);
}
7. 如何查看androidapp啟動過程
啟動的過程如下:
Shell接收到命令,啟動一個程序,此時shell首先會fork一個新的進程
新fork的進程,通過execve系統調用,陷入到內核中,內核檢查和載入需要執行的二進制映像文件,檢驗其合法性及許可權。通常用戶態進程要啟動一個新的程序(如shell),fork後,execve要緊跟著執行,這樣會有更好的效率(由於使用COW技術,這樣可以避免頁表復制,而execve後,之前進程中的所有內容都是無用的,若execve緊跟fork後,可以避免COW引起的拷貝);
通常二進制文件都會要依賴一些系統動態庫,此時kernel會啟動載入器/system/bin/linker,執行linker的__linker_init()
Linker的linker_init(),會分析二進制的elf文件,載入依賴的動態庫文件,然後轉入二進制映像的入口函數__start中執行
__start會調用C庫的初始化函數__libc_init()
__libc_init()會調用映像的main函數,這個main函數也就是用戶app的入口函數
main() 函數執行完畢後,通過exit()退出進程執行
8. android中怎麼啟動app
通過包名獲取此APP詳細信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(packagename, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
return;
}
// 創建一個類別為CATEGORY_LAUNCHER的該包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);
// 通過getPackageManager()的queryIntentActivities方法遍歷
List<ResolveInfo> resolveinfoList = getPackageManager()
.queryIntentActivities(resolveIntent, 0);
9. android 系統怎麼啟動app的
可能是某程序在運行,請打開任務管理器看看有我作程序在運行將他關掉。再查出來是什麼程序,打開程序設置將它重新設置一下。
\r\n如果不是程序請點開始
附件
系統設置
系統還原
還原到以前正常的時候就可以了。\r\n附件:狼.2015362
10. Android 10.0 Activity的啟動流程
本文主要學習記錄,基於Android 10的源碼,有錯誤歡迎指正,主要目的是梳理流程圖。
以進程為單位的調用棧圖如下:
1.activity中的startActivity方法最終都會通過拿到ATSM的代理IActivityTaskManager調用的startActivity;
2.之後進入system server進程中的ATMS startActivity,ATMS 經過收集Intent信息,然後使用ActivityStackSupervisor.startSpecificActivityLocked,如果進程已經存在,則直接使用realStartActivityLocked,通過App的binder客戶端的代理ApplicationThread調用回到bindApplication,走入Activity的啟動流程;如果進程不存在則通過socket鏈接Zygote,請求fork新的進程;
3.App進程創建完成後,進程啟動會調用ActivityThread.main方法,初始化主線程Handler,接著走入attach方法,然後通過AMS的代理調用AMS的attachApplication方法,並將App進程的通信代理ApplicationThread傳入AMS;
4.AMS獲取到ATMS調用ApplicationThread的bindApplication回到App進程的ActivityThread.ApplicationThread.bindApplication方法中,然後使用Handler切換到主線程執行handleBindApplication,這里初始化了App的進程名字、時間,用戶的硬體配置,包括App的文件系統,創建了App的Context實例,Instrumentation實例,調用App的onCreate回調方法,同時告訴AMS APP初始化工作完畢;
5.AMS接著會調用ATMS的attachApplication,最後調用ClientLifecycleManager的scheleTransaction方法,通過App的Binder代理ApplicationThread回到ActivityThread;
6.進入ActivityThread.ApplicationThread.scheleTransaction方法之後就進入了Activity的onStart、onResume回調
創建進程之前的過程主要是AMS的內部信息收集的判斷的過程,下面主要看一下App進程啟動的源碼流程
從應用進程被創建開始,ActivityThread.main被執行
調用ActivityThread的attach方法,然後將activity和AMS通信的Binder代理IApplicationThread實例傳入AMS
接著進入AMS進程,ActivityManagerService.attachApplicationLocked
1.thread.bindApplication :該方法主要講App進程的配置信息通過IApplicationThread Binder通信回傳到ActivityThread中
2.mAtmInternal.attachApplication :mAtmInternal實際就是ActivityTaskManager的實例,通過LocalServices載入
那麼這里相當於走到了ActivityTaskManagerServer的attachApplication中
先看第一條:
注意:ActivityThread中存在於Binder通信的代理--》ApplicationThread extends IApplicationThread.Stub
ActivityThread--》ApplicationThread--》bindApplication
這里的bindApplication主要初始化了AppBindData,然後發送BIND_APPLICATION給APP的主線程BIND_APPLICATION,最後執行了handleBindApplication
handleBindApplication如下:
ActivityThread--》class H extends Handler
該方法主要在App進程中對App的一些硬體資源配置申請的屬性、App的文件夾等完成App基本信息的初始化
接著看第二條:mAtmInternal.attachApplication
mAtmInternal.attachApplication最終會調用mRootActivityContainer.attachApplication(wpc)
RootActivityContainer.attachApplication
接著調用ActivityStackSupervisor.realStartActivityLocked開始創建Activity
ActivityStackSupervisor.realStartActivityLocked
創建ClientLifecycleManager和ClientTransactionHandler來輔助管理Activity的生命周期
注意
clientTransaction.addCallback是LaunchActivityItem
lifecycleItem是ResumeActivityItem
ClientLifecycleManager.scheleTransaction最終會調用ClientTransaction的schele方法
那麼這個mClient是IApplicationThread的實例,那麼此時也就回到了ActivityThread的ApplicationThread中
ActivityThread的ApplicationThread中
因為ActivityThread繼承ClientTransactionHandler,所以到了ClientTransactionHandler中
通過Handler發送消息EXECUTE_TRANSACTION到H中
接著TransactionExecutor的execute方法
LaunchActivityItem.execute方法
client其實是在ActivityThread的實例,那麼就回到了ActivityThread的handleLaunchActivity
接著調用performLaunchActivity
在performLaunchActivity中,主要是載入App的資源包,然後創建了Activity的context實例,並創建了Activity的實例,接著調用activity.attach方法,attach執行完之後調用了onCreate方法。
activity.attach
activity.attach中主要
1.創建了PhoneWindow實例
2.設置了Window介面的監聽
3.初始化了成員變數,包括線程和WindowManager
到此Oncreate已經完成,那麼OnStart和OnResume去哪了?
TransactionExecutor的execute方法
之前們只分析了executeCallbacks,接著executeLifecycleState方法
TransactionExecutor的executeLifecycleState方法
cycleToPath:lifecycleItem即為ResumeActivityItem
第一點:
int finish = lifecycleItem.getTargetState()
lifecycleItem對應ResumeActivityItem,如下:
ResumeActivityItem的getTargetState方法
對應ActivityLifecycleItem中的枚舉類型:
第二點:ActivityClientRecord中的mLifecycleState,由於在前面已經執行了handleLaunchActivity所以mLifecycleState=1
對應ActivityLifecycleItem中的枚舉類型:
PRE_ON_CREATE = 0
所以final int star = 1
接著看getLifecyclePath,此時start=1,finish=3
那麼返回的IntArray就是2
接著看performLifecycleSequence
最終執行的是handleStartActivity所以最終走到了ActivityThread的handleResumeActivity
兩點:
調用activity.performStart
調用Instrumetation.callActivityOnPostCreate
performStart方法:
調用了Instrumentation.callActivityOnStart方法:
最終到了activity的onStart方法
第二點:Instrumentation.callActivityOnPostCreate
上面主要走了cycleToPath,接著ResumeActivityItem.execute
調用了handleResumeActivity方法
handleResumeActivity最終調用performResumeActivity
調用了Instrumentation.callActivityOnResume,
到了activity.onResume()方法
參考文章: https://blog.csdn.net/u011386173/article/details/87802765