Dialog 对应的 Context 的探究 创建dialog时,如果传入构造方法不是一个activity类型的上下文,则导致WindowManagerImpl类型为Window的变量mParentWindow,从而导致WindowManagerGlobal的addView不会调用Window的adjustLayoutParamsForSubWindow方法,从而不会给attr.token赋值,导致在WindowManagerService服务中的身份验证失败,抛出BadTokenException异常。
Android 12 Token 机制 在 android framework 框架中 activity 和 window 是相互关联的,而他们的管理者 AMS 和 WMS 是怎么来实现这种关联关系的,答案就是通过 token。首先大家需要了解一下 LayoutParams,当然属性很多,简单了解即可:这里就说到了 token 的问题,应用窗口程序和子窗口均需要获取到 Activity 的 token。那么 token 是什么呢?
LeetCode 88 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n。
Android 全局手势识别原理 本文是对全局手势识别进行分析,那什么是全局手势呢?简单来说就是在任何界面都需要识别的手势,比如:在任何界面从手机屏幕左侧滑动,当前的界面会退出 (类似 back 键)。我们知道,在 Android 系统中一个 Activity 在显示时,当对屏幕触摸事件进行响应时,经过了许多逻辑处理,详细分析可以参考之前对 IMS 原理分析的一系列文章:中的输入系统章节。接下来对全局手势事件注册监听及处理进行分析。目前使用10.0代码分析。
Android AMS 系列之 systemReady Android 系统服务进程 system_server,进入消息循环前的最后一步,就是调用 AMS 的 systemReady() 方法。今天我们分析一下这里的流程。
android FgThread线程 几个关键属性private static FgThread sInstance FgThread对象private static Handler sHandler handler对象,用来处理消息private static HandlerExecutor sHandlerExecutor 用来执行任务ServiceThread类继承自HandlerThread,是一个拥有属于线程自己的Looper对象没有对外提供构造方法,私有的构造方法里面,设置了线程名为android.fg}.}.}
LeetCode 3---Longest Substring Without Repeating Characters Example 1:Output: 3Example 2:Output: 1Example 3:Output: 3。
LeetCode 387---First Unique Character in a String Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.Example 1:Example 2:Example 3:Constraints:
JAVA 虚拟机架构 在我看来,不管学习什么样的知识或技术,首先要做的就是从全局上去认识它,这样才能避免盲人摸象,事倍功半的情况发生。既然要学习 JVM,就要先了解它的整体架构,于是我画了个 JVM 架构图来帮助大家认识它。对 JVM 还不太了解的同学第一次看到这张花里胡哨的图肯定会一脸懵逼,不用怕,其实我们只需要重点理解并掌握其中一部分 (同时也是面试重点) 就好了,比如运行时数据区、垃圾收集器、内存分配策略和类加载机制等,类文件结构也可以学习一下,其他的稍作了解即可。...
力扣203题---反转链表 在遍历链表时,将当前节点的next指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。链表中节点的数目范围是 [0, 5000]...
力扣344题---反转字符串 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输出:[“o”,“l”,“l”,“e”,“h”]s[i] 都是 ASCII 码表中的可打印字符。...
链表力扣142题---环形链表 这个公式告诉我们,重新设定fast在相遇的位置出发,slow在起点位置出发,都各走一步,那么它们最终都会相遇,并且相遇的位置为第一个节点的地址。假设这是一个链表,带环的是一个循环结构;假设起点到第一个节点的距离为L,第一个节点到相遇的位置为X,整个环的大小为C。fast:L+X+NC(因为不知道环的大小,所以不知道slow到相遇的位置时,fast转了几圈)这个题目是要我们找到环的第一个节点,返回它的地址,那么,我们应当该怎么做呢?有slow和fast从起点到相遇的位置为。...
链表力扣205题---反转链表 如链表:1 2 3 4 5,那么递归到最后一个结点5时,当前结点也就是4的下一个结点就是5,那么4-next=5,4->next->next = 5->next。同时返回新的头也就是5的位置,就如此递归返回,就完成了链表反转,同时反转后的头也找到了。(1)反转链表,可以采用头插法的思想,将每个元素从头到尾依次遍历,每次都将元素插入到头部,从而将链表反转。其实就是迭代法,如:1->2->3 变成 1...
链表力扣203题---移除链表元素 用temp表示当前节点,temp.next表示当前节点的下一个节点;最后返回 newHead.next,即将 newHead的下一个节点作为头节点返回。删除一个节点你要想到的代码:head.next=head.next.next;由于它是第一个节点,要删就得知道它的前一个节点,所以我们可以建一个虚拟节点。依次遍历每个节点,当temp.next=null;让它指向head,那么就得到一个新的链表;当要删除的处于第一个节点和最后一个节点。即找到该结点的前一个结点。...
JVM 基础 - 类字节码详解 一 多语言编译为字节码在JVM运行计算机是不能直接运行java代码的,必须要先运行java虚拟机,再由java虚拟机运行编译后的java代码。这个编译后的java代码,就是本文要介绍的java字节码。为什么jvm不能直接运行java代码呢,这是因为在cpu层面看来计算机中所有的操作都是一个个指令的运行汇集而成的,java是高级语言,只有人类才能理解其逻辑,计算机是无法识别的,所以java代码必须要先编译成字节码文件,jvm才能正确识别代码转换后的指令并将其运行。Java代码间接翻译成字节码,储存字节
JUC 工具类之 Exchanger 详解 一 Exchanger 简介线程间的数据共享除了定义一个共享数据然后各个线程去访问这种方式外,还可以使用 Exchanger 交换数据。Exchanger——交换器,是 JDK1.5 时引入的一个同步器,从字面上就可以看出,这个类的主要作用是:进行两个线程之间的数据交换。Exchanger 有点类似于 CyclicBarrier,我们知道 CyclicBarrier 是一个栅栏,到达栅栏的线程需要等待其它一定数量的线程到达后,才能通过栅栏。Exchanger 可以看成是一个双向栅栏,如下图:Th