当前位置: 首页 > news >正文

一般卖机械行业的做哪些网站做网站要具备些什么条件

一般卖机械行业的做哪些网站,做网站要具备些什么条件,开发公众号 微网站开发,济南好的seo一、Activity启动流程 Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的startActivity内部也是通过调用startActivityForResult来启动Activity#xff0c;只不过传递的requestCode小于0Activity的启动流程涉及到多个进程之间的通讯这里主…一、Activity启动流程  Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的startActivity内部也是通过调用startActivityForResult来启动Activity只不过传递的requestCode小于0Activity的启动流程涉及到多个进程之间的通讯这里主要是ActivityThread与ActivityManagerService之间的通讯ActivityThread向ActivityManagerService传递进程间消息通过ActivityManagerNativeActivityManagerService向ActivityThread进程间传递消息通过IApplicationThread。ActivityManagerService接收到应用进程创建Activity的请求之后会执行初始化操作解析启动模式保存请求信息等一系列操作。ActivityManagerService保存完请求信息之后会将当前系统栈顶的Activity执行onPause操作并且IApplication进程间通讯告诉应用程序继承执行当前栈顶的Activity的onPause方法A到B界面打开B那么A得先PauseActivityThread接收到SystemServer的消息之后会统一交个自身定义的Handler对象处理分发ActivityThread执行完栈顶的Activity的onPause方法之后会通过ActivityManagerNative执行进程间通讯告诉ActivityManagerService栈顶Actiity已经执行完成onPause方法继续执行后续操作ActivityManagerService会继续执行启动Activity的逻辑这时候会判断需要启动的Activity所属的应用进程是否已经启动若没有启动则首先会启动这个Activity的应用程序进程毕竟可以多进程ActivityManagerService会通过socket与Zygote继承通讯并告知Zygote进程fork出一个新的应用程序进程然后执行ActivityThread的main()方法在ActivityThread.main方法中执行初始化操作初始化主线程异步消息然后通知ActivityManagerService执行进程初始化操作ActivityManagerService会在执行初始化操作的同时检测当前进程是否有需要创建的Activity对象若有的话则执行创建操作ActivityManagerService将执行创建Activity的通知告知ActivityThread然后通过反射机制创建出Activity对象并执行Activity的onCreate方法onStart方法onResume方法ActivityThread执行完成onResume方法之后告知ActivityManagerService onResume执行完成新界面展示开始执行栈顶Activity的onStop方法这个老界面即将走入后台新界面马上展示ActivityManagerService开始执行栈顶的onStop方法并告知ActivityThreadActivityThread执行真正的onStop方法(A调用stop) 二、Activity布局创建流程 主要代码 Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//Activity.onCreatesetContentView(R.layout.activity_main); } 当ActivityManagerService接收到启动Activity的请求之后会通过IApplicationThread进程间通讯告知ApplicationThread并执行handleLauncherActivity方法handleLauncherActivity方法内部调用了performLaunchActivity方法performLaunchActivity方法里通过反射的机制创建的Activity并调用了Activity的attach方法 初始化了一些Activity的成员变量主要是mWindow对象并且mWindow的成员实例是PhoneWindow实例performLaunchActivity调用mInstrumentation.callActivityOnCreate(activity, r.state);在里面调用performCreate方法方法里实现onCreate的回调。从这儿开始走到OnCrete方法。那么来第一行super.onCreate()里面主要就是做一个初始化并且之后会执行一个判断逻辑若Activity的mCalled为false则会抛出我们刚刚捕获的异常那么这个mCalled成员变量是在什么时候被赋值的呢好吧就是在Activity的onCreate方法赋值的所以我们在实现自己的Activity的时候只有调用了super.onCreate方法才不会抛出这个异常反过来说我们实现自己的Actiivty那么一定要在onCreate方法中调用super.onCreate方法。接下来是setContentView()方法。 public void setContentView(LayoutRes int layoutResID) {getWindow().setContentView(layoutResID);initWindowDecorActionBar(); } 这个getWindow就是phoneWindow在activity.attach初始化的 phoneWindow.setContentView---installerDector()---执行mDecor generateDecor();生成一个DecorView。判断mContentParent(此处第一次为空) if (mContentParent null) {mContentParent generateLayout(mDecor);}调用此方法 generateLayout()方法里通过调用LayoutInflater.inflate方法来加载布局文件到内存中关于LayoutInflater.inflater是如何加载布局文件的并且通过对代码的分析我们发现PhoneWindow中的几个成员变量mDectormContentRootmContentParent的关系mDector -- mContentRoot -- mContentParent包含activity到phonewidow再到mDector -- mContentRoot -- mContentParentactivity就拥有了布局文件的引用 知识点  Activity的展示界面的特性是通过Window对象来控制的每个Activity对象都对应这个一个Window对象并且Window对象的初始化在启动Activity的时候完成在执行Activity的onCreate方法之前每个Window对象内部都存在一个FrameLayout类型的mDector对象它是Acitivty界面的root viewActivity中的window对象的实例是PhoneWindow对象PhoneWindow对象中的几个成员变量mDectormContentRootmContentParent都是View组件它们的关系是mDector -- mContentRoot -- mContentParent -- 自定义layoutViewLayoutInflater.inflate主要用于将布局文件加载到内存View组件中也可以设定加载到某一个父组件中典型的Activity的onCreate方法中需要调用super.onCreate方法和setContentView方法若不调用super.onCreate方法执行启动该Activity的逻辑会报错若不执行setContentView的方法该Activity只会显示一个空页面。 三、Activity的布局绘制流程 从AMS调Activity的onResume到App进程的主线程有关Activity onResume生命周期的第一个方法就是handleResumeActivitymWindowManager是在Activity的attach方法中被创建的 在获取了Activity的Window相关参数之后执行了r.activity.makeVisible()方法。 //ActivityService.java Overridepublic void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean isForward,String reason) {......//1.最后会调到Activity的onResumefinal ActivityClientRecord r performResumeActivity(token, finalStateRequest, reason); ......final Activity a r.activity;......boolean willBeVisible !a.mStartedActivity;if (!willBeVisible) {try {willBeVisible ActivityManager.getService().willActivityBeVisible(a.getActivityToken());} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}if (r.window null !a.mFinished willBeVisible) {r.window r.activity.getWindow();View decor r.window.getDecorView();decor.setVisibility(View.INVISIBLE);2.获取WindowManagerImpl对象ViewManager wm a.getWindowManager();WindowManager.LayoutParams l r.window.getAttributes();a.mDecor decor;l.type WindowManager.LayoutParams.TYPE_BASE_APPLICATION;l.softInputMode | forwardBit;if (r.mPreserveWindow) {a.mWindowAdded true;r.mPreserveWindow false;ViewRootImpl impl decor.getViewRootImpl();if (impl ! null) {impl.notifyChildRebuilt();}}if (a.mVisibleFromClient) {if (!a.mWindowAdded) {a.mWindowAdded true;3.调用WindowManagerImpl的addView方法wm.addView(decor, l);} ......}if (!r.activity.mFinished willBeVisible r.activity.mDecor ! null !r.hideForNow) {r.activity.mVisibleFromServer true;mNumVisibleActivities;if (r.activity.mVisibleFromClient) {r.activity.makeVisible();}}......}.......}Activity执行onResume之后再ActivityThread中执行Activity的makeVisible方法。 //Activity.java void makeVisible() {if (!mWindowAdded) {ViewManager wm getWindowManager();//这里的ViewManager对象是通过getWindowManager()方法获取的。是在Activity的attach方法方法中初始化的wm.addView(mDecor, getWindow().getAttributes());mWindowAdded true;}mDecor.setVisibility(View.VISIBLE);//将mDecor给显示到界面上 }wm.addView(mDecor, getWindow().getAttributes()); addView这里面调用了mGlobal.addView(view, params, mDisplay, mParentWindow);而mGlobal为WindowManagerGlobal在mGlobal.addView里调用了root.setView。(ViewRootImpl) 在root.setView里调用了调用了requestLayout方法调用执行重绘的请求 Override public void requestLayout() {if (!mHandlingLayoutInLayoutRequest) {checkThread();//检查是否UI线程mLayoutRequested true;scheduleTraversals(); 这里面调用performTraversals方法 从这个方法开始我们的View经过大小测量位置测量 界面绘制三个逻辑操作之后就可以展示在界面中了。} } performTraversals的相关内容如下绘制界面 View的绘制流程包含了测量大小测量位置绘制三个流程 Activity的界面绘制是从mDecor即根View开始的也就是从mDecor的测量大小测量位置绘制三个流程 View体系的绘制流程是从ViewRootImpl的performTraversals方法开始的 View的测量大小流程:performMeasure -- measure -- onMeasure等方法; View的测量位置流程performLayout -- layout -- onLayout等方法 View的绘制流程onDraw等方法 View组件的绘制流程会在onMeasure,onLayout以及onDraw方法中执行分发逻辑也就是在onMeasure同时执行子View的测量大小逻辑在onLayout中同时执行子View的测量位置逻辑在onDraw中同时执行子View的绘制逻辑 Activity中都对应这个一个Window对象而每一个Window对象都对应着一个新的WindowManager对象WindowManagerImpl实例
http://www.sczhlp.com/news/166333/

相关文章:

  • 免费的网站模板有哪些建站平台代理
  • 政务公开网站建设要求扬州市住房和城乡建设局网站
  • 网站源码 免费下载长春网络营销网站
  • 阿里云机器怎么做网站中卫网站推广服务
  • 山西做网站建设的平台网站建站哪个好
  • 企业网站建设总体构架网站的轮播怎么做的
  • 免费设置自己的连笔签名南阳做网站seo的
  • 建设网站的群做情人节网站
  • 湖南做网站 e磐石网络做电影网站模板教学
  • 建设网站的总结工程项目建设自学网站
  • 以橙色为主的网站电影网页制作素材
  • 配资网站开发是什么意思网站开发有前途
  • 宁夏建设厅官方网站网站建设产品展示型的
  • 南昌p2p网站建设凡科网站备案
  • 遵义外国网站制作如何制作网址二维码
  • 做题记录(Part 1. 基础算法)
  • python中使用高并发分布式队列库celery的那些坑 - 指南
  • 深圳工程网站建设wordpress微信支付模板
  • 太原网站制作哪里便宜海尔网站建设的目标是什么
  • 自己做的网站不备案不能访问吗如何用dede做带下单的网站
  • 怎么申请域名建立网站网络营销网站建设论文
  • 做网站被骗了怎么办广州网站建设广州
  • wordpress微商城模板seo外链工具软件
  • 网站风格怎么写做网站什么服务器好
  • 网站线上推广方式网站建设的落地页
  • 用jsp做婚纱网站的流程网站空间注册
  • 大新网站制作滑县网站建设哪家专业
  • 关于江西建设监督网网站迁移视频 收费 网站怎么做
  • 做网上夫妻去哪个网站wordpress 图标插件
  • 中山网站搜索引擎优化西安市做网站的