为了账号安全,请及时绑定邮箱和手机立即绑定

Android-精通Activity

难度中级
时长 1小时29分
学习人数
综合评分9.50
33人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.2 逻辑清晰
  • ActivityThread不同于HandlerThread,它并不是一个线程,而只是一个普通的方法
    查看全部
  • (接上一笔记) 2.handleDestroyActivity() ActivityClientRecord r = performDestroyActivity(token, finishing, configChanges, getNonConfigInstance); //回调自己的onDestory()方法 WindowManager wm = r.activity.getWindowManager();//通过activity.getWindowManager()获得WindowManager对象,该对象是ViewManagerImpl的具体实现。 wm.removeViewImmediate(v); //删掉activity的view,实现在WindowManagerImpl类中 …… Context c = r.activity.getBaseContext(); //activity创建时的context ((ContextImpl) c).scheduleFinalCleanup(r.activity.getClass().getName(), "Activity"); //在这里清除掉context if (finishing) { try { ActivityManagerNative.getDefault().activityDestroyed(token); //获取AMS的代码对象,然后通知AMS该activity将要销毁 } 注意: (1)WindowManager的实现是在windowManagerImpl中 public final class WindowManagerImpl implements WindowManager (2)从handleDestroyActivity()最后可以看到,这里只是获取AMS代理对象告诉AMS该activity已经销毁,但最终的销毁动作还要由AMS去执行
    查看全部
  • 一、Activity\Window\WindowManager 1.Activity 负责整体的生命周期的管理,并接收WindowManagerService发送过来的事件(键盘、back键)进行处理。 2.Window 就是PhoneWindow,控制界面的显示和界面的添加,界面的管理要依靠WindowManager对象。 3.WindowManager 界面的管理,与远程的WindowManagerService交互,它是代理处理对象。 二、onStop\onDestory 1.handleStopActivity performStopActivityInner(r, info, show, true);//对activity自己回调onStop()方法 updateVisibility(r, show); //真正使activity处于不可见的状态 在updateVisibility()中执行不可见操作的代码: if (r.activity.mVisibleFromServer) { r.activity.mVisibleFromServer = false; mNumVisibleActivities--; v.setVisibility(View.INVISIBLE); //设置为不可见 } 2.handleDestroyActivity() ActivityClientRecord r = performDestroyActivity(token, finishing, configChanges, getNonConfigInstance); //回调自己的onDestory()方法 WindowManager wm = r.activity.getWindowManager();//通过activity.getWindowManager()获得WindowManager对象,该对象是ViewManagerImpl的具体实现。 Context c = r.activity.getBaseContext(); //activity创建时的context ((ContextImpl) c).scheduleFinalCleanup(r.activity.getClass().getName(), "Activity"); //在这里清除掉context
    查看全部
  • onResume()的分析——onResume是activity用来显示它的内容的。
    查看全部
  • 6.(6)activity.attach() if (activity != null) { Context appContext = createBaseContextForActivity(r, activity); CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager()); Configuration config = new Configuration(mCompatConfiguration); activity.attach(appContext, this, getInstrumentation(), r.token, r.ident, app, r.intent, r.activityInfo, title, r.parent, r.embeddedID, r.lastNonConfigurationInstances, config); attach()将会创建一个mWindow对象,将activity和windowManagerService关联起来。 (7)mInstrumentation.callActivityOnCreate(activity, r.state) 这个就是回调activity自己的onCreate() mActivities.put(r.token, r);//onCreate()完成之后就会添加到mActivities这个list中 7.setContentView() public void setContentView(View view, ViewGroup.LayoutParams params) { getWindow().setContentView(view, params); initActionBar(); } 这里的getWindow()获取的mWindow就是在activity.attach()中创建的,这个mWindow是和activity相关联的。 注意setContentView()的具体实现是在PhoneWindow.java中。
    查看全部
  • 6.Activity生命周期是什么时候回调的 (3)onCreate()的回调会调用handleLaunchActivity(),然后调用performLaunchActivity() activity.attatch()将创建的activity与WindowsManagerService向关联,进而控制activity的窗口显示。 (4)performLaunchActivity() Activity activity = null; try { java.lang.ClassLoader cl = r.packageInfo.getClassLoader(); //r是ActivityClientRecord对象,r.packageInfo是安装包名 activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent); //通过classLoader来创建activity对象 StrictMode.incrementExpectedActivityCount(activity.getClass()); r.intent.setExtrasClassLoader(cl); if (r.state != null) { r.state.setClassLoader(cl); …… Application app = r.packageInfo.makeApplication(false, mInstrumentation); //在makeApplication()函数也是使用classLoader来创建Application对象的 (5)makeApplication() java.lang.ClassLoader cl = getClassLoader(); app = mActivityThread.mInstrumentation.newApplication(cl, appClass, appContext); … mActivityThread.mAllApplications.add(app); … instrumentation.callApplicationOnCreate(app); //这里调用application自己的onCreate()
    查看全部
  • 6.Activity生命周期是什么时候回调的 (1)Instrumentation是辅助的管理activity生命周期回调以及创建Application类的辅助类。 (2)H类继承于Handler,它负责处理AMS发送过来的跨进程间通信的message (3)接下来重点看一下一个activity是如何创建和启动的
    查看全部
  • 2)thread.attach(false)主要完成与AMS之间的交互 ActivityManagerNative.getDefault()可以获取AMS的一个远程代理接口。ActivityManagerNative是AMS的远程代理对象,AMS是运行在一个单独的进程当中的,如果想要在当前的进程使用AMS就需要调用getDedault()来获取AMS的一个代理对象,相当于和AMS进行交互。 当一个APP启动时,主线程中会调用ActivityThread的main()函数,main()中调用thread.attach()。attatch()函数中获得AMS的远程代理对象后,会执行代理对象的mgr.attachApplication(mAppThread)来告诉AMS该进程已经启动。 mgr.attachApplication(mAppThread)中的mAppThread是实现Binder接口的一个类,下面会分析mgr.attachApplication(mAppThread)这个方法。 3. ApplicationThread、ActivityClientRecord、ActivityRecord (1)ApplicationThread,ApplicationThread继承于ApplicationThreadNative public abstract class ApplicationThreadNative extends Binder implements IApplicationThread { 可以看到ApplicationThread实现了远程Binder类,它就是负责和AMS进行通信的Binder实现类。ApplicationThread类在ActivityThread中创建。 (2)ActivityClientRecord和ActivityRecord 前者描述了客户端Activity的一些属性,后者是ActivityManagerService中描述activity属性的类。
    查看全部
  • 1. ActivityThread (1)ActivityThread不是一个线程类,只是一个普通的java类 public final class ActivityThread { 2. ActivityThread是如何被启动的 (1)ActivityThread是在app启动时运行在该app主线程的一个类,只是在主线程中运行而已。 ActivityThread启动时main()是入口,执行如下操作: Looper.prepareMainLooper();//准备一个消息轮询对象 ActivityThread thread = new ActivityThread(); thread.attach(false); Looper.loop();//开始轮询消息队列 注意:这一点和handler是相似的。 (2)当启动一个APP时,该APP进程有一个主线程,在主线程中就会调用ActivityThread的main方法。 1)Looper.prepareMainLooper()会先调用prepare() private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { //先判断是否本地thread中有Looper对象,如果没有会创建一个looper throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper(quitAllowed)); //默认情况下主线程第一次创建时不会有个looper对象,会创建一个 } 2)thread.attach(false)主要完成与AMS之间的交互 ActivityManagerNative.getDefault()可以获取AMS的一个远程代理接口 (下一笔记)
    查看全部
  • Android插件开发—首先需要充分理解Android四大组件的执行流程,生命周期
    查看全部
  • 好好
    查看全部
  • 非常好
    查看全部
  • 调用Activity的OnDestory()方法之后,并没有将这个Activity对象置为null,它还是会在内存中的
    查看全部
  • 对ActivityThread的认识:1.从本质来看,它不是一个线程,而是一个Java类; 2.需要在主线程的方法中被运行; 3.运行时,首先调用main方法,其中也会调用:OnAttatch,loop方法; 4.AMS--->ActivityManagerService; 5.ActivityManagerService; 5.一个线程中,只有一个Looper对象; 6ActivityManagerNative是ActivityManagerService的远程代理对象; 7.首先会调用的方法是:mgr的attatchApplicationThread; 补充:光标放在方法名上,按下Ctrl键,单击即可进入内部查看源码;
    查看全部
  • 还是没说context到底是什么啊
    查看全部
    0 采集 收起 来源:Context类介绍

    2015-07-30

举报

0/150
提交
取消
课程须知
需要有重识Activity和深入Activity2门课程的基础课程,Android学习中基础学习是占很大一部分,只要学好了android基础才能更好的学习后面的知识。
老师告诉你能学到什么?
与Activity相关的Framew层,Activity、Window、WindowManger三者之间的关系,Activity生命周期分析

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!