08 2021 档案

摘要:1. Zygote进程作用是什么? 启动SystemServer。 SystemServer启动后做了什么? 创建Binder线程池。 启动SystemServiceManager。 孵化App进程。 2. Zygote进程什么时候被启动? Android系统启动后第一个启动的进程就是Zygote进 阅读全文
posted @ 2021-08-31 10:47 naray 阅读(326) 评论(0) 推荐(0)
摘要:1. 什么是UI线程? App通过Zygote fork创建一个App进程,通过ActivityThread的main()函数创建ActivityThread实例及UI线程Looper对象。 程序都有一个main()函数,也就是主函数,Android中的主函数在ActivityThread这个类中, 阅读全文
posted @ 2021-08-28 19:14 naray 阅读(156) 评论(0) 推荐(0)
摘要:一、LiveData是什么? LiveData是可观察数据存储器类,与常规可观察数据存储类不同,LiveData具有对系统组件(如:Activity、Fragment、Service等)的生命周期感知能力。 LiveData只有在生命周期的活跃状态下才会更新数据,即start、resume,非活跃状 阅读全文
posted @ 2021-08-28 18:23 naray 阅读(320) 评论(0) 推荐(0)
摘要:一、ViewModel是什么? ViewModel以注重组件生命周期的方式存储和管理页面相关的数据。ViewModel让Activity未设置configChanages="orientation|screenSize"属性时,设备发生旋转后,页面数据得以继续留存。 二、ViewModel产生背景? 阅读全文
posted @ 2021-08-28 17:41 naray 阅读(202) 评论(0) 推荐(0)
摘要:一、ThreadPoolExecutor类使用 1. 创建线程池源码: /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize the nu 阅读全文
posted @ 2021-08-28 16:52 naray 阅读(213) 评论(0) 推荐(0)
摘要:1. 为什么使用锁? 多线程操作带来的问题? 访问冲突; 锁竞争; 死锁; 锁的粒度; 上下文切换开销; 同步/内存拷贝开销等; 2. 线程安全 Java内存模型(JMM) working memory & main memory 原子性; 可见性; 有序性; happens before原则 代码 阅读全文
posted @ 2021-08-28 16:52 naray 阅读(38) 评论(0) 推荐(0)
摘要:1. 线程的状态 Java程序在运行过程中线程可能有6种状态: New:新创建状态; Runnable:可运行状态; Blocked:阻塞状态; Waiting:等待状态; Timed waiting:超时等待状态; Terminated:终止状态; 2. 线程同步 1. 加锁与条件变量 Lock/ 阅读全文
posted @ 2021-08-28 16:51 naray 阅读(111) 评论(0) 推荐(0)
摘要:1. Java线程 2. Java线程安全 3. 多线程与线程间通信 4. Java 线程池ThreadPoolExecutor类 5. Java线程与线程池进阶 阅读全文
posted @ 2021-08-28 16:51 naray 阅读(17) 评论(0) 推荐(0)
摘要:1. 什么是线程安全? 可变资源(内存)间线程共享。 2. 如何实现线程安全? 不共享资源; 共享不可变资源; 共享可变资源: 可见性; 操作原子性; 禁止重排序; 1. 不共享资源 1. 可重入函数:函数体内部不涉及任何外部变量; // 可重入函数 public static int addTwo 阅读全文
posted @ 2021-08-28 16:49 naray 阅读(312) 评论(0) 推荐(0)
摘要:1. 如何停止一个线程? 官方停止线程的方法被废弃了,所以不能直接停止线程,这么做是非常不安全的。 2. 为什么不能简单停止一个线程? 因为,简单停止一个线程会出现很多异常情况,比如:多线程读取共享变量时,其中一个线程加锁了,其它线程处于等待状态,如果,将加锁线程暂停了,那么其它线程就会被堵塞在这里 阅读全文
posted @ 2021-08-28 16:49 naray 阅读(325) 评论(0) 推荐(0)
摘要:一、ProcessLifeCycleOwner是什么? 用于监听App程序的生命周期。 二、示例 ApplicationObserver类: class ApplicationObserver: LifecycleObserver { } DemoApplication类: class DemoAp 阅读全文
posted @ 2021-08-28 15:25 naray 阅读(389) 评论(0) 推荐(0)
摘要:一、LifecycleService的用途? 解耦系统组件Service的生命周期。 LifecycleService继承自Service。 二、示例 MyServiceObserver类: class MyServiceObserver : LifecycleObserver { } MyServ 阅读全文
posted @ 2021-08-28 15:17 naray 阅读(811) 评论(0) 推荐(0)
摘要:一、Lifecycle是什么? Lifecycle生命周期感知组件,可执行操作响应另一个组件(Activity或者Fragment)的生命周期状态。 二、Lifecycle出现的背景 用于解耦系统组件与其它组件的生命周期。 三、示例 App中都有开屏广告,在开屏广告右上角一个倒计时功能。倒计时功能需 阅读全文
posted @ 2021-08-28 15:05 naray 阅读(333) 评论(0) 推荐(0)
摘要:一、Jetpack之前使用哪些架构? 在Jetpack之前,Android是没有官方的标准架构,大家使用架构从MVC演化到MVP及MVVM架构。 二、Jetpack是什么? Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一 阅读全文
posted @ 2021-08-28 10:55 naray 阅读(246) 评论(0) 推荐(0)
摘要:一、JNI是什么? JNI是Java Native Interface的缩写,译为Java本地调用。JNI是一种技术。 二、JNI技术的用途? Java程序中的函数调用Native程序中的函数。Native一般指使用C/C++编写的函数。 Native程序中的函数调用Java程序中的函数。 三、注册 阅读全文
posted @ 2021-08-26 18:04 naray 阅读(1583) 评论(0) 推荐(0)
摘要:一、类加载器 ClassLoader 1. 什么是类加载器? 通过类的全限定名获取描述该类的二进制字节流这个过程通过类加载器(Class Loader)完成。 classloader类加载就是动态加载class文件到内存当中。Java虚拟机并不是一次性加载所有class文件到内存当中的,是按需加载到 阅读全文
posted @ 2021-08-21 19:27 naray 阅读(84) 评论(0) 推荐(0)
摘要:0. Java 容器 1. HashTable、HashMap、ConcurrentHashMap 线程安全对比 HashMap:异步的,线程不安全; HashTable:同步的,synchronized针对的是整个hash表,是独占锁,同一时刻只能有一个线程访问操作,线程安全; Concurren 阅读全文
posted @ 2021-08-21 19:26 naray 阅读(237) 评论(0) 推荐(0)
摘要:一、Java程序运行时内存分配策略 静态存储区(方法区):主要用于存放静态数据、全局Static数据和常量的存储区。此存储区在程序编译时就已经分配好了,并且在程序整个运行期间都存在。 栈区:方法体内的局部变量都在栈上创建。 堆区:又称动态内存分配区,在程序运行中通过new关键字申请的内存。 二、栈内 阅读全文
posted @ 2021-08-21 19:26 naray 阅读(283) 评论(0) 推荐(0)
摘要:1. 什么是方法分派? 就是确定调用谁的,哪个方法。 在Java中子类覆写父类方法的方法都是虚方法,使用final、private修饰的方法不是虚方法。 2. 方法分派情况分析 在Java中子类继承父类并覆写父类方法,在调用时取决于运行时的实际类型。 // 父类 public class Super 阅读全文
posted @ 2021-08-20 16:34 naray 阅读(149) 评论(0) 推荐(0)