


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Activity怎么显示界面
动画展示/upload/information/20210522/379/525107.png源码解析从小爱诞生说起//ActivityThread.java
private
Activity
performLaunchActivity(ActivityClientRecord
r,
Intent
customIntent)
{
//创建ContextImpl
ContextImpl
appContext
=
createBaseContextForActivity(r);
Activity
activity
=
null;
try
{
java.lang.ClassLoader
cl
=
appContext.getClassLoader();
//创建Activity
activity
=
mInstrumentation.newActivity(
cl,
component.getClassName(),
ent);
}
try
{
if
(activity
!=
null)
{
//完成activity的一些重要数据的初始化
activity.attach(appContext,
this,
getInstrumentation(),
r.token,
r.ident,
app,
ent,
r.activityInfo,
title,
r.parent,
r.embeddedID,
r.lastNonConfigurationInstances,
config,
r.referrer,
r.voiceInteractor,
window,
r.configCallback,
r.assistToken);
//调用activity的onCreate方法
if
(r.isPersistable())
{
mInstrumentation.callActivityOnCreate(activity,
r.state,
r.persistentState);
}
else
{
mInstrumentation.callActivityOnCreate(activity,
r.state);
}
}
}
return
activity;
}给小爱找个和View交互的帮手(PhoneWindow)//Activity.java
final
void
attach()
{
//创建PhoneWindow
mWindow
=
new
PhoneWindow(this,
window,
activityConfigCallback);
mWindow.setCallback(this);
mWindow.setWindowManager(
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
mToken,
mComponent.flattenToString(),
(info.flags
&
ActivityInfo.FLAG_HARDWARE_ACCELERATED)
!=
0);
}加载布局文件(DecorView)//Activity.java
public
void
setContentView(@LayoutRes
int
layoutResID)
{
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}//PhoneWindow.java
@Override
public
void
setContentView(int
layoutResID)
{
if
(mContentParent
==
null)
{
installDecor();
}
if
(!hasFeature(FEATURE_CONTENT_TRANSITIONS))
{
mLayoutInflater.inflate(layoutResID,
mContentParent);
}
}
private
void
installDecor()
{
if
(mDecor
==
null)
{
mDecor
=
generateDecor(-1);
}
else
{
mDecor.setWindow(this);
}
if
(mContentParent
==
null)
{
mContentParent
=
generateLayout(mDecor);
}
}
protected
DecorView
generateDecor(int
featureId)
{
return
new
DecorView(context,
featureId,
this,
getAttributes());
}//加载xml布局文件
mLayoutInflater.inflate(layoutResID,
mContentParent);
public
View
inflate(@LayoutRes
int
resource,
@Nullable
ViewGroup
root,
boolean
attachToRoot)
{
final
Resources
res
=
getContext().getResources();
final
XmlResourceParser
parser
=
res.getLayout(resource);
try
{
return
inflate(parser,
root,
attachToRoot);
}
finally
{
parser.close();
}
}显示出这个View(ViewRootImpl)@Override
public
void
handleResumeActivity()
{
//onResume
final
ActivityClientRecord
r
=
performResumeActivity(token,
finalStateRequest,
reason);
//addView
if
(r.window
==
null
&&
!a.mFinished
&&
willBeVisible)
{
r.window
=
r.activity.getWindow();
View
decor
=
r.window.getDecorView();
ViewManager
wm
=
a.getWindowManager();
WindowManager.LayoutParams
l
=
r.window.getAttributes()
wm.addView(decor,
l);
}//WindowManagerGlobal.java
public
void
addView()
{
synchronized
(mLock)
{
root
=
new
ViewRootImpl(view.getContext(),
display);
view.setLayoutParams(wparams);
mViews.add(view);
mRoots.add(root);
mParams.add(wparams);
try
{
root.setView(view,
wparams,
panelParentView);
}
}
}
public
ViewRootImpl(Context
context,
Display
display)
{
mContext
=
context;
mWindowSession
=
WindowManagerGlobal.getWindowSession();
mThread
=
Thread.currentThread();
}//ViewRootImpl.java
public
void
setView()
{
synchronized
(this)
{
//绘制
requestLayout();
//调用WMS的addWindow方法
res
=
mWindowSession.addToDisplay(mWindow,
mSeq,
mWindowAttributes,
getHostVisibility(),
mDisplay.getDisplayId(),
mWinFrame,
mAttachInfo.mContentInsets,
mAttachInfo.mStableInsets,
mAttachInfo.mOutsets,
mAttachInfo.mDisplayCutout,
mInputChannel);
//设置this(ViewRootImpl)为view(decorView)的parent
view.assignParent(this);
}
}//ViewRootImpl.java
@Override
public
void
requestLayout()
{
if
(!mHandlingLayoutInLayoutRequest)
{
checkThread();
mLayoutRequested
=
true;
scheduleTraversals();
}
}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- u校园测试试题及答案
- 调查之风面试题目及答案
- 煤矿职称面试题及答案
- 房地产市场调研问卷试题
- 艺术鉴赏与创作能力评估试题
- 软件设计师考试网络安全知识试题及答案
- 网络设备管理与运维试题及答案
- 剖析重点2025年软考网络工程师试题及答案
- 复杂系统控制试题及答案集
- 对外经济政策的分析与制定试题及答案
- 2024年江苏省连云港市新海实验中学中考三模地理试题
- MOOC 知识创新与学术规范-南京大学 中国大学慕课答案
- 大脑语言功能区
- 山东省高考志愿规划
- 珠宝销售个月工作总结
- 污水处理厂人工智能与机器学习应用
- 机械通气基础知识与常见模式
- 《发酵产物分离纯化》课件
- 物业服务费用收支情况明细表
- Lazada官方跨境电商运营全书
- 海南省近5年中考语文作文真题及模拟题汇编(含参考例文)
评论
0/150
提交评论