Sai

我有一壶酒 足以慰风尘


  • 首页

  • 标签

  • 分类

  • 归档

  • Android

  • Java

  • Kotlin

  • Git

  • Hexo

  • 关于

Activity、View、Window、ViewRootImpl

发表于 2020-04-29 | 分类于 Android

Window是什么?

1.先看官方的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* Abstract base class for a top-level window look and behavior policy. An
* instance of this class should be used as the top-level view added to the
* window manager. It provides standard UI policies such as a background, title
* area, default key processing, etc.
*
* <p>The only existing implementation of this abstract class is
* android.view.PhoneWindow, which you should instantiate when needing a
* Window.
*/
一、作为顶层窗口的抽象类,并规范了窗口的外观与行为,同时也是顶层view的窗口管理器。
二、提供诸如背景,标题、区域、默认事件处理等等。
三、只有一个唯一实现类->PhoneWindow

阅读全文 »

几种单例模式

发表于 2020-04-27 | 分类于 Java

单例模式

1.作为23种设计模式之一,单例模式的应用还算是比较广泛,无论第三方库还是日常的开发。总能看到单例模式的身影,对于各种不同的实现是有所差异的。在日常开发过程中,看似简单的问题处理到极致还是需要考虑多个方面的因素的,多线程下的安全性、高性能、懒加载。。。

阅读全文 »

UI的绘制流程

发表于 2020-04-26 | 分类于 Android

从setContentView()开始

1
2
3
4
5
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

1.当我们在Activity的onCreate的setContentView()方法中直接写入布局的ID,来看看这中间经历了什么从而加载到了我们的手机屏幕上。

阅读全文 »

Android10-事件分发

发表于 2020-04-23 | 分类于 Android

事件分发

1.在Android体系中,事件分发机制占有重要的一份,了解事件的分发机制,对于滑动等冲突才有更深刻的理解。自定义View中能更好的扩展,遇到相关问题能从整个流程上思考,寻找最优解决办法。先上图:

阅读全文 »

UI适配几种方案

发表于 2020-04-20 | 分类于 Android

为什么要适配?

1.Android随着不断的发展壮大,设备碎片已越发严重,各大厂商对屏幕参数没有统一的标准,导致UI组件在不同的屏幕尺寸上展示效果显示不一致。
2.屏幕适配的最终目的,让组件在与给定的UI标准匹配到不同的屏幕。使显示效果尽可能达到一致。

阅读全文 »

startActivity启动流程分析,Android 10

发表于 2020-04-20 | 分类于 Android

涉及的主要类

1.ActivityThreadApp的入口,进程中主线程的在main方法中执行。
2.ActivityTaskManager此类提供有关Activity及其任务栈(如任务,堆栈和显示)的信息,并与之交互。
3.ActivityTaskManagerService安卓10新增的类,主要负责activity的管理和调度工作,System service for managing activities and their containers (task, stacks, displays,... ).
4.ActivityManagerService继承自IActivityManager.Stub负责四大组件的、进程,生命周期与状态的切换。
5.ActivityStackSupervisor负责activity栈的管理,这个类的解释很有意思,估计谷歌下一步会改动这个类,看todo:

1
2
3
4
5
6
// TODO: This class has become a dumping ground. Let's
// - Move things relating to the hierarchy to RootWindowContainer
// - Move things relating to activity life cycles to maybe a new class called ActivityLifeCycler
// - Move interface things to ActivityTaskManagerService.
// - All other little things to other files.
--这个类过于繁重,考虑将与层次结构相关的事物移至RootWindowContainer,将与活动生命周期相关的事物移至新的名为ActivityLifeCycler的类,将接口事物移至ActivityTaskManagerService。将其他所有事物移至其他文件。

阅读全文 »

多线程操作i++

发表于 2020-04-18 | 分类于 Java

原子操作

“不可中断的一个操作,或者一系列操作”–原子操作,一个操作要么成功要么失败,没有中间状态。

Java中的count++

1.Java中count++与C++中count++操作不一样,在Java中此操作不是原子操作,包含了三个步骤:取值->修改->写入。

阅读全文 »

Handler、MessageQueue、Looper解析

发表于 2020-04-17 | 分类于 Android

Handler消息机制模型

1.Message:消息通常由用户产生,点击、触摸滑动等事件,或者App内部的消息(由业务或其他需要)。
2.MessageQueue:“消息队列”本质是一个单向链表的数据结构,负责将消息压入队列MessageQueue.enqueueMessage和取走消息MessageQueue.next。
3.Looper:无限循环,从MessageQueue取出待处理的消息由相关的Handler处理消息,回收Message。
4.Handler:消息处理类,主要职责发送消息(Handler.sendMessage)到消息池,处理消息(Handler.handleMessage)。

阅读全文 »

子线程中更新UI?

发表于 2020-04-16 | 分类于 Android

前言

 Android系统被设计为单线程模型,当应用启动Zygotefork出进程,并在进程中创建一个主线程(UI线程),都知道UI线程是不能做耗时操作的。例如网络请求,操作数据库等,否则就会出现ANR错误。UI组件以及UI操作是线程不安全的,规定除了主线程外的线程不能够对UI进行操作。如果设计成线程安全的,势必需要涉及到加锁等一些机制,大大降低反馈效率,对于移动设备,用户体验显然是不好,另外多线程操作UI变得更加不可控。历史原因 Why are most UI frameworks single threaded?

阅读全文 »

算法

发表于 2018-10-30 | 分类于 Java

算法

 算法如果不常使用,可能过段时间就点模糊了;这里总结几种常用的排序算法,帮助记忆并理解,举一反三。

冒泡排序

 冒泡排序(Bubble Sort):一种简单的排序算法,重复地走访过需要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作重复进行直到没有再需要交换为止。也即该数列已经完成排序。交换位置的过程中越小的数会慢慢“浮”到数列的左边(顶端),也是算法名字的由来。

阅读全文 »
12345
JiaM

JiaM

人生不就是这般

46 日志
5 分类
13 标签
GitHub E-Mail
© 2020 JiaM
Power by Hexo
|
Themes-NexT.Pisces v5.1.4
  |  本站总访问量 次   |  您是第 位小伙伴