并发的学习与使用系列 第八篇

AQS是AbstractQueuedSynchronizer的简称,是并发组件包java.util.concurrent也就是JUC(Java Util Concurrency)的核心,以及很多并发组件如前面几篇中介绍到的ReentrantLock,Condition,BlockingQueue以及线程池里使用的worker等都是基于其实现的,将很多复杂的,繁琐的并发控制过程封装起来,便于其他并发工具类来实现更多,方便的功能,其主要通过volatile和UnSafe类的原子操作(Atomic相关)来实现阻塞和同步,之前的文章并发的学习与使用系列提到里Lock的实现类ReentrantLock是一个可重入的,可实现公平的锁。下面通过ReentrantLock的源码来看看其是怎么实现的。

阅读全文

关于Activity,Window,View的关系一直有个模糊的印象,看别人的分析一般都这么理解Activity是管理Window,Window用来承载View,View是最终的视图,也有说Window的作用可有可无的,作用并不大的,并不是说这些观点有问题,而是看了这么多后,会更迷惑,管理是怎么管理的,承载是怎么实现的,如果不自己根据源码看一些,这些概念会一直是抽象的,遇到问题还是没法理解,例如:

1 . 在Activity里调用

1
2
WindowManager.LayoutParams wl = new WindowManager.LayoutParams();
getWindowManager().addView(mView,wl);

1
2
LayoutParams wmParams =...
addContentView(mView,wmParams); //activity里的方法

这两种方式背后的实现是怎样的,有什么区别?

阅读全文

分析这个过程不是单纯为跟一遍函数调用的流程,而是更好的理解平常用到的一些方法、对象的初始化时间,对象创建的个数,方法的先后顺序,以及每个类,方法背后的作用和目的。主要是一下几个问题:

  1. Application是什么时候创建的,每个应用程序有几个Application
  2. 应用的资源路径什么时候初始化的
  3. 应用中ContextImpl的个数
  4. Application.attach(),Activity.attach()的调用时机及作用
  5. Instrumentation的重要性及具体作用
  6. 点击Launcher启动Activity和应用内部启动Activity的区别
阅读全文

并发的学习与使用系列 第五篇

线程池的技术背景

在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。

所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。

例如Android中常见到的很多通用组件一般都离不开”池”的概念 阅读全文

  • 第 1 页 共 1 页

SilenceDut

talk is cheap,here are my blog


Android engineer


广东,广州