第一行代码安卓第二版P65页: onCreate()这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用,你应该在这个方法中完成活动的初始化操作,比如加载布局...onStart() 这个方法在活动由不可见变为可见的时候调用。 onResume() 这个方法在活动准备好喝用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶,并且处于运行状态。...onPause() 这个方法在系统准备去启动或者恢复另一个活动的时候调用,我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用...以上7个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三种生存期。 完整生存期。...活动在onCreate()方法和onDestory()方法之间所经历的,就是完整生存期,一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestory()方法中完成释放内存的操作
A对象的时候父类会调用子类方法?...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。
A this.A(x) B this(x) C super(x) D A(x) 考点:考察求职者对this的理解 出现频率:★★★★★ 【面试题分析】 this的作用其中一个就是在一个构造方法中调用另一个构造方法...,格式为this(参数); 构造方法直接this(),非构造方法则用this.() super是调用父类的方法; A(a)这种形式是在new一个类时使用。
方法后面创建的吗 为什么一定需要checkThread呢 那为什么不加锁呢 为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢 Android中子线程真的不能更新...和之前提到的一样,想重新自定义自己程序中的四大组件,就必须重新实现一个类,重写这个类中的抽象方法,在清单文件中注册,最后才能够正常使用。...所以干脆使用单线程模型处理UI操作,使用时用Handler切换即可 为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢 // 为什么一开始在Activity...Android 中的 SurfaceView 通常会通过一个子线程来进行页面的刷新。...文件存储数据 文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件
对于Android大型程序来说,64k方法数与线性内存的限制都是必须要考虑的问题。...事实上,解决64K方法限制的唯一方法是拆分多dex,不同方案的差异在于需指定哪些类必须在主dex,这与我们期待的效果以及加载方式相关。...这里只是简单的得到所有入口类(即rules中的Instrumentation、application、Activity、Annotation等等)的直接引入类。何为直接引用类?...事实上,若我们在attachBaseContext中调用Multidex.install,我们只需引入Application的直接引用类即可,mainDexClasses将Activity、ContentProvider...当前微信必要的依赖集已经41306个方法,说不定哪一天就爆了。 FaceBook加载方案 那是否存在一种加载方式它的依赖集很小,但却不会像官方方案一样造成明显的卡顿?
哈哈,实际上你完全可以不用这么痛苦,用 Kotlin 替代 Java 开发你的程序,无论是 Android 还是 Server,你都能像之前写 Java 一样思考,同时又能享受到新一代编程语言的特性,说到这里你是不是开始心动了呢...简直烦的要死,而且有时候恰好这个类还没有 tag 这个成员,实践中我们通常会把当前类名作为 TAG,但每个类都要做这么个工作,是在是没有什么趣味可言(之前我是用 LiveTemplates 帮我的,即便如此也没有那种流畅的感觉...我们再来回头看一下 debug 这个方法,我们发现它可以通过泛型参数 T 来获取到T的具体类型,并且拿到它的类名——当然,如果你愿意,你甚至可以调用它的构造方法来构造一个对象出来——为什么 Kotlin...我们通常会在某个方法体内创建一个对象并返回它,可我们除了调用它的构造方法之外还需要做一些其他的操作,于是就要创建一个局部变量。。。有了 apply 这个扩展方法,我们就可以这么写: ?...不过用 Kotlin 的 Android 扩展插件,我们就可以这样: 先上布局文件: main.xml ? 在 Activity 中: ?
呢 那为什么不加锁呢 为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢 Android中子线程真的不能更新UI吗 保证上述条件1成立不就可以避免checkThread...viewRootImpl对象是在Activity中的onResume方法执行完成之后,View变得可见时才创建的,之前的操作是没有进行线程检查的,所以没有报错。...所以干脆使用单线程模型处理UI操作,使用时用Handler切换即可 为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢 // 为什么一开始在Activity...ViewRootImpl#checkThread 没有被调用到,也就是说,检测当前线程是否是创建的 UI 那个线程 的逻辑没有执行到,所以程序没有崩溃一样能跑起来。...Android 中的 SurfaceView 通常会通过一个子线程来进行页面的刷新。
协议从未规定GET/POST的请求长度限制是多少; 但是实际应用上, GET提交的数据的限制,取决于浏览器和web服务器设置的URL请求长度限制; 各种浏览器和web服务器的设定均不一样, 这依赖于各个浏览器厂家的规定或者可以根据...参考: 不严谨地说,Java中实现多线程的方式有两类,即继承Thread类以及实现Runnable接口; 1.继承Thread类 创建一个类去继承Thread类并重写run()方法, 使用的时候构造一个这个类的对象去调用...cequals()是根类Obeject中的方法, 查看源码我们可以知道默认的equals()方法中, 首选也是直接调用==,比较对象地址: ?...手中(包括发送待处理数据参数的Activity自身); 各个Activity通过绑定媒介service,调用service中的方法, 把需要处理的数据作为service中方法的参数传给service...8.0) 总结: 设置android:configChanges="orientation|keyboardHidden|screenSize" 则都不会调用Activity的其他生命周期方法,
遇到了这个问题,我们没有选择和这个策略进行对抗,我们非常理解Google为什么限制使用非公开SDK接口。所以我们重新Review了插件框架的本质原理和设计缺陷,进而设计了全新的插件框架Shadow。...但是由于它是个系统的Activity子类,它就有很多方法不能直接调用,甚至还可能需要避免它的super方法被调用。...如果插件Activity不是一个真的Activity,只是一个跟Activity有差不多方法的普通类,这件事就简单多了,只需要让壳子Activity持有它,转调它就行了。...Shadow做了一个非常简单事,通过运用AOP思想,利用字节码编辑工具,在编译期把插件中的所有Activity的父类都改成一个普通类,然后让壳子持有这个普通类型的父类去转调它就不用Hack任何系统实现了...虽然说是非常简单的事,实际上这样修改后还带来一些额外的问题需要解决,比如getActivity()方法返回的也不是Activity了。不过Shadow的实现中都解决了这些问题。
BroadcastReceiver所在消息队列拿到此广播后,回调它的onReceive()方法。 广播传输的数据是否有限制,是多少,为什么要限制?...postInvalidate():该方法功能和invalidate()一样,只是它可以在非UI线程中调用。...在这些类中MessageQueue是Java层与C++层维系的桥梁,MessageQueue与Looper相关功能都通过MessageQueue的Native方法来完成,而其他虚线连接的类只有关联关系,...通常会有很多后台进程在运行,因此它们会保存在 LRU (最近最少使用)列表中,以确保包含用户最近查看的 Activity 的进程最后一个被终止。...Parcelable是Android提供一套序列化机制,它将序列化后的字节流写入到一个共性内存中,其他对象可以从这块共享内存中读出字节流,并反序列化成对象。
Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。...使用场景如新闻类或者阅读类App的内容页面。 singleTask 模式 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。...JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径 BroadCast...文件存储数据 文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()
在这些类中MessageQueue是Java层与C++层维系的桥梁,MessageQueue与Looper相关功能都通过MessageQueue的Native方法来完成,而其他虚线连接的类只有关联关系,...序列化的原因基本三种情况: 1.永久性保存对象,保存对象的字节序列到本地文件中; 2.对象在网络中传递; 3.对象在IPC间传递。 46、广播传输的数据是否有限制,是多少,为什么要限制?...声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限 列出 Instrumentation类,这些类可在应用运行时提供分析和其他信息。...87、Android中跨进程通讯的几种方式 1:访问其他应用程序的Activity 如调用系统通话应用 Intent callIntent = new Intent(Intent.ACTION_CALL...104、android中的存储类型 105、Activity的生命周期,finish调用后其他生命周期还会走么? 106、有遇到过哪些屏幕和资源适配问题?
,减少APK安装包的大小,以及解决65535方法数量的限制。...当我们谈论如何设计Hooking系统时,我们通常会需要解答两个问题:"如何Hook API"和"要Hook 哪个API"。第一个问题很简单,因为在Java Hook一个API是有标准答案的。...AMS完成这些任务后,它会把控制权返还给新的Activity,并通知ActivityThread加载并执行新的Activity的代码。就像Activity的里面的onCreate函数回调一样 ?...所以我们提出一个检测方法,通过这个检测方法,Android应用程序可以检测它是否正在运行在插件化技术创建的虚拟环境中,并且提供一个可以终止运行的选项。...Plugin-Killer库很小,因为它只包含很少的函数调用和很少的检测逻辑 4.3、如何检测虚拟环境 为了抵抗被不可信的宿主应用动态加载,我们必须寻找出一个检测方法,这个检测方法可以检测移动应用是否被作为插件来加载
在scope的例子中,我们用自定义的@PerActivity注解一个类,所以这个对象存活时间就和 activity的一样。...也许你会问为什么我要将context和其他成员暴露出去。这正是Dagger中 components工作的重要性质:如果你不想把modules的类型暴露出来,那么你就只能显示地使用它们。...这也是为什么@Provide注解的方法要用@Singleton限定。...我们通过在Activity的onCreate()方法中调用 getApplicationComponent(),完成这些操作。...Fragment的presenter中我们也做了同样的事情,这儿的获取方法有一点不一样,因为问我们使用的是per-activity范围限 定的component。
若使用多ClassLoader机制,主工程引用插件中类需要先通过插件的ClassLoader加载该类再通过反射调用其方法。插件化框架一般会通过统一的入口去管理对各个插件中类的访问,并且做一定的限制。...第二种是组件之间的自定义类和自定义方法的调用(组件向外提供服务)。 跨组件通信方案分析:第一种组件之间的页面跳转实现简单,跳转时想传递不同类型的数据提供有相应的 API即可。...中声明 Service 接口 (含有需要被调用的自定义方法), 然后在自己的模块中实现这个 Service 接口, 再通过 ARouter API 暴露实现类。..., Fragment 到 Fragment, Activity 到 Fragment, Fragment 到 Activity) 以及跳转时的数据传递 (基础数据类型和可序列化的自定义类类型) 第二种是组件之间的自定义类和自定义方法的调用...通知设置 通知清除 画中画模式:清单中Activity设置android:supportsPictureInPicture 后台限制 自动填充框架 系统优化等等优化很多 Android 9.0(P)新特性
Activity 和 Fragment 通常会在下面三种情况下被销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...SavedStateHandle 和 Bundle 一样,以键值对形式存储数据,它包含在 ViewModel 中,并且可以在应用处于后台时进程被杀死的情况下幸存下来。...在 Activity 或 Fragment 的 onCreate 方法中,将 ViewModelProvider 的调用修改为: //下面的 Kotlin 扩展需要依赖以下或更新新版本的 ktx 库:...Ian Lake 在他的演讲: 单 Activity 架构: 为什么、什么情况下以及如何使用中介绍了一些我们选择单一 Activity 架构的原因,而与本文相关的一点,是这种架构允许在多个界面 (destination...Kotlin 协程 (Coroutines) 同样适用于处理异步调用,它让逻辑变得简单的同时,也确保了操作不会阻塞主线程。
5、为什么系统不建议在子线程访问UI? 参考回答:Android的UI控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可预期的状态。...7、Handler、Thread和HandlerThread的差别? 参考回答:Handler:在android中负责发送和处理消息,通过它可以实现其他支线线程与主线程之间的消息通讯。...HandlerThread:一个继承自Thread的类HandlerThread,Android中没有对Java中的Thread进行任何封装,而是提供了一个继承自Thread的类HandlerThread...参考回答:当一个拥有Object锁的线程调用 wait()方法时,就会使当前线程加入object.wait 等待队列中,并且释放当前占用的Object锁,这样其他线程就有机会获取这个Object锁,获得...Android的缓存更新策略没有统一的标准,一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作,但不管是内存缓存还是存储设备缓存,它们的缓存容量是有限制的,因此删除一些旧缓存并添加新缓存,如何定义缓存的新旧这就是一种策略
开始 说到依赖注入,做 Android 的人都会想到一个库:Dagger;说到 Dagger,大家的反应普遍是一套三连:牛逼、高端、我才不用。 又牛逼又高端,为什么不用?因为太难了。是吧?...一个类里有两个变量,这两个变量就是它的依赖: ? 要初始化一个依赖,有两种方法:第一,你这个类自己初始化: ? 第二,让外部帮你初始化。 其中这第二种,让外部帮你初始化你的依赖,就叫依赖注入。...这些都属于由外部来提供依赖的初始化,所以都是依赖注入,并不是非要像 Dagger 那样使用注解的像魔法一样的才叫依赖注入。也就是说,其实我们每个人都已经在使用依赖注入了。...加载的方式可以选择直接调用构造函数: ? 或者指定子类或实现类: ? 或者干脆给出具体的代码: ? 加载的作用域可以选择默认的每次都初始化,也可以设置成全局单例的: ?...也可以设置成针对任何 Activity、Fragment、View 或者 ViewModel 的局部共享: ? 简单又强大,好用又灵活。
虽然然最简单粗暴的方法是分dex,还有其他像混淆等,但本人还是研究了几种代码上减少方法的方式,希望能帮到“有缘人”。...1.1 子类中调用了父类中未被子类重写的方法 (1)场景 先看一个简单的类: public class MainActivity extends AppCompatActivity { @Override...因为按照java的语义,如果有覆盖父类的方法,则会直接调用覆盖的方法。从smali文件可以看出setContentView是属于MainActivity的方法。...(4)综上所述: 子类中调用了父类中未被子类重写的方法时,请尽量使用super来调用或者使用方法的父类强转下this。...三、总结 (1)子类中调用了父类中未被子类重写的方法时,请尽量使用super来调用。 (2)建议定义内部类是尽量使用非私有的。 (3)若外部类字段有可能被内部类访问到,就尽量不使用private。