- 博客(33)
- 收藏
- 关注
转载 好博客
ThreadLocal源码解析: https://www.cnblogs.com/micrari/p/6790229.htmlLinkHashMap源码解析: https://blog.csdn.net/justloveyou_/article/details/71713781HashMap源码解析 http://www.importnew.com/20321....
2018-11-17 22:52:58
488
原创 Activity 的工作原理
ActivityActivity 组件是可以停止的,在实际开发中可以通过Activity的 finish() 来结束一个Activity的运行。Activity扮演者前台界面的角色。 startActivity 有好几种重载方式,但是最终调用startActivityForResult(). Service 的工作流程启动状态:用于执行后台计算,不需要和外界有直接的交互,尽管S...
2018-06-07 20:34:40
7176
1
原创 第十章 Android的消息机制
有时候需要在子线程中进行耗时的I/O操作,可能是读取文件或者是访问网络等,当耗时操作完成以后可能需要在UI上做一些改变,这时候就需要用Handler切换到主线程执行。MessageQueue 只是一个消息存储单元,不能处理消息,内部的存储结构是单链表。Looper 是消息循环,以无限循环的形式去查找是否有新消息,如果有的话就处理消息,否则就一直等着。ThreadLocal 可以在每个线程中...
2018-06-07 20:34:33
181
原创 第十一章 Android 的线程和线程池
线程分为主线程和子线程。主线程是指进程所拥有的线程(java 默认情况下一个进程只有一个线程,这个线程就是主线程),主要处理和界面相关的事情,子线程执行耗时操作,子线程也叫工作线程。AsyncThread封装了线程池和 Handler,主要是为了方便开发者在子线程中更新UI。HandlerThread是一种具有消息循环的线程,内部可以使用 Handler。IntentService是一个服...
2018-06-07 20:34:27
167
原创 第十二章 Bitmap 的加载和 Cache
Bitmap 的高效加载由于Bitmap的特殊性以及Android 对单个应用所施加的内存限制,比如16MB,这导致加载 Bitmap 的时候很容易出现内存溢出。加载图片:BitmapFactory 类提供了四类方法,decodeFile、decodeResource、decodeStream、decodeByteArray,分别用于支持从文件系统、资源、输入流以及字节数组中加载出一个Bi...
2018-06-07 20:33:51
177
原创 第十五章 Android 性能优化
内存泄漏分析值MAT工具MAT全称是Eclipse Memory Analyzer。 1. 打开DDMS界面,选中要分析的进程,然后单击 Dump HPROF file 按钮。可导出一个 hprof 后缀的文件 2. 导出的hprof文件不能被MAT直接识别,需要通过 hprof-conv 命令转换一下。( hprof-conv.exe 是Android SDK提供的工具,位于platfo...
2018-06-07 20:33:44
167
原创 第十四章 JNI 和 NDK编程
Java JNI的本意是Java Native Interface(java 本地接口),为了方便java调用C、C++等本地代码所封装的一层接口。Java的优点是跨平台,但是和本地交互的时候出现了短板,一些和操作系统相关的操作出现了短板。于是提供JNI专门用于和本地代码交互。通过Java JNI,用户可以调用C、C++所编写的本地代码。NDK 是Android所提供的一个工具集合,通过ND...
2018-06-07 20:33:22
205
原创 第八章 理解 Window 和 WindowManager
在桌面上需要展示一个类似悬浮窗的东西,需要使用到 Window 来实现。 Window 是一个抽象类,具体实现是 PhoneWindow。WindowManger 是外界访问 Window 的入口,Window的具体实现位于 WindowMangerService 中,WindowManager 和 WindowMangerService的交互是一个 IPC 过程。 Android 中的所有视...
2018-06-07 20:33:09
194
原创 八 Window的添加过程
Window 的添加过程是通过 WindowManager 的 addView 来实现的,WindowManager 是一个接口,实现类是WindowManagerImpl,因此直接看该类的addView(). @Override public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams p...
2018-06-07 20:32:58
214
原创 第五章 理解 RemoteViews
RemoteViews 表示的是一个 View 结构,可以在其他进程中显示,RemoteViews 提供了一组基础的操作用于跨进程更新它的界面。应用:通知栏和桌面小部件。5.1 RemoteViews 的应用通知栏主要是通过 NotificationManager 的 notify() 来实现的; 桌面小部件则是通过 AppWidgetProvider 来实现的,AppWidgetP...
2018-06-07 20:32:43
185
原创 第四章 View 的工作原理
4.3 View 的工作流程4.3.1 measure 过程 1. View 的 measure 过程 View 的measure()是一个 final 类型的方法,不能被重写,其中调用了 View 的 onMeasure(), https://blog.csdn.net/ghdsq/article/details/797144654.3.2 measure 的总结 mea...
2018-06-07 20:32:28
142
原创 第三章 View 的事件体系
3.1 View 基础知识View 是 Android 中所有空间的基类。 3.1 View 的位置参数 在 Android 中,x 轴和 y 轴的正方向分别为右和下。这些坐标相对于父容器来说的:top 是 view 左上角的纵坐标,left 是 view 的横坐标,right 是右下角横坐标,bottom 是右下角纵坐标;x 和 y 分别是 View 左上角的坐标;translation...
2018-06-07 20:32:10
151
原创 第二章 IPC机制
2.1 Android IPCIPC 为进程间通信或跨进程通信,是指两个进程数据交换的过程。 按照操作系统的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源;而进程一般是指一个执行单元,在pc和移动设备上指一个程序或者一个应用。 多进程的情况: 1:一个应用因为某些原因自身需要采用多进程模式来实现,原因有很多:有些模块由于特殊原因需要运行在单独的进程(音乐播放器);webV...
2018-06-07 20:31:35
290
原创 第一章 Activity的生命周期和启动模式
1.1 Activity的生命周期全面分析典型情况下的生命周期:是指在有用户参与的情况下,Activity所经过的生命周期的改变; 异常情况下的生命周期:指Activity被系统回收或者由于当前设备的configuration(配置)发生改变导致Activity被销毁重建,异常情况下的生命周期和典型情况下的生命周期略有不同。1.1.1 典型情况下的生命周期分析Activity完...
2018-06-07 20:31:13
151
原创 对象的创建
虚拟机遇到一个new指令的时候,根据new指令的参数是否能在常量池中定位到一个类的符号引用,并检查符号引用代表的类是否已经加载、解析、初始化。如果没有,必须先执行类加载。类加载通过之后,虚拟机为新生的对象分配内存。 根据内存是否规整,分配内存有两种方式:空闲列表、指针碰撞 如果java堆中内存绝对规整,使用指针碰撞:在可用内存和已经使用的内存之间有一个指针,给对象分配内存的时候,指针向可用空间...
2018-05-16 16:22:48
121
原创 四 View 的测量宽高和最终宽高的区别
View 的测量宽高和最终宽高有什么区别?这个问题可以具体为getMeasuredHeight()和getHeight()有什么区别。 View public final int getHeight() { return mBottom - mTop; }再看看 mBottom 、mTop 是怎么来的: View protected ...
2018-03-28 15:25:56
317
原创 四 View 的 measure 过程
如果 View 只是一个原始的 View,通过 measure 方法就可以完成测量过程;如果是一个 ViewGroup,会先对子元素进行 measure,然后测量 ViewGroup 自身。 1:View 的 measure 过程 (ViewGroup) measureChildren() -> (ViewGroup) measureChild -> (ViewGroup) chi...
2018-03-28 11:40:36
171
原创 第七章 Android动画机制与技巧
Android属性动画 private void objectAnimatorText1() { setContentView(R.layout.activity_main); final Button button = (Button) findViewById(R.id.bt); LinearLayout linearLayout ...
2018-03-12 21:26:09
172
原创 第六章 Android 绘图机制与处理技巧
屏幕的尺寸信息px:像素 dp:独立密度像素 PPI:每英寸包含的像素个数 具体解释如下链接,这哥们写的特别好 http://blog.csdn.net/u010074743/article/details/51603736可以做一个工具类,public class DisplayUtil { /** * 将px值转换为dip或者dp值,保证尺寸...
2018-03-12 21:26:01
186
1
原创 第三章 Android控件架构与自定义控件详解
Android控件架构在Activity中使用`setContentView(R.layout.activity_main)`来设置一个布局。每个Activity都包含一个Window对象,在Android中Window对象通常由PhoneWindow来实现。PhoneWindow将一个DecorView设置整个应用窗口的根View,这里面所有的View监听事件,都由WindowMann...
2018-03-12 21:25:51
238
原创 第五章 Android Scroll 分析
Android 坐标系将屏幕的左上角的顶点作为Android坐标系的原点,从这个点向右是 x 轴正方向,向下是 y 轴正方向。getRawX()、getRawY()获得的坐标是Android坐标系上的坐标。视图坐标系描述子视图在父视图的位置关系,视图坐标系同样是从原点向右是 x 轴正方向,向下是 y 轴正方向。,原点不再是屏幕的左上角,而是父布局的左上角为坐标原点。...
2018-03-12 21:25:41
128
原创 第四章 ListView使用技巧
ListView的使用范围非常广泛,尽管RecycleView在很多地方取代了ListView,但是ListView的地位还是难以撼动的。 那么这一章节的知识点,将通过代码的方式展示出来:ListView的重要属性 <com.why.a4_listview.MyListView android:id="@+id/lv" android:...
2018-03-12 21:25:31
172
原创 音频条形图
一个简单的案例:可以看到音乐app上有些音频条,随着音调的大小条形图也发生变化,在这里不去真实地监听音频输入了,只是用一些数字来模拟即可。 条形图不断变化。public class VoiceView extends View { private static final String TAG = "VoiceView"; /** * 小矩形的总数 ...
2018-03-12 21:25:04
969
原创 弧线展示图
在理财或者健康等相关的app中,经常有弧线占比的view出现。 将该view分成三个部分就容易多了,分别是:中间的圆形、中间显示的文字和外圈的弧线。这里是把View绘制的长度设置为了屏幕的宽度。public class ScaleView extends View { private int mLength; private int widthSize; pr...
2018-03-12 21:24:53
284
原创 方法调用小笔记
ActivitysetResult(int resultCode, Intent data):如果Activity B调用了该方法,那么Activity B在退出的时候将会把data传给启动该Activity的Activity A,A中的onActivityResult中的第三个参数负责接收。但是该方法在finish()中调用的时候,不能在super.finish()后面调用,否则无效。on...
2018-03-12 21:24:37
120
原创 一个公用的topbar
在做项目的时候,经常会用到左边是返回键、右边是更多、中间是文字描述的topbar,那么就有必要写一个公用的了。 topbar的属性back键的文字大小、文字颜色和背景; more键的文字大小、文字颜色和背景; 中间文字描述的文字、颜色和大小。在values文件里创建attrs.xml,分别定义: <declare-styleable name="TopBa...
2018-03-12 21:24:24
363
原创 去掉标题栏
AppCompatActivity没有标题栏,所以requestWindowFeature(Window.FEATURE_NO_TITLE);不起作用; 而AppCompatActivity去掉ActionBar的方式 getSupportActionBar().hide(); getWindow().setFlags(WindowManager.Layou...
2018-03-12 21:24:14
107
原创 notification
Intent intent = new Intent(context, SecondActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationManager notificationMana...
2018-03-12 21:22:56
141
原创 联系人列表
类似微信通讯录的联系人列表。自定义Viewpublic class MyTextView extends View { private String[] words = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S
2018-01-29 19:48:35
347
原创 Handler的源码讲解
在Android中,Handler非常重要,在主线程的main方法中就使用了Handler,并且由于UI只能在UI线程上更新,Handler的使用更广泛了,当然,Handler的使用不止是更新界面,例如:在子线程做一些耗时操作,完成后可能需要更新UI,不更新UI做一些其他事情也是可以的。一般在多线程里使用Handler都是通过下面的方式。new Thread(new Runnable() {
2018-01-12 18:35:00
160
原创 单例模式
//饿汉式单例 单例模式通用代码public class Singleton1 { private static Singleton1 singleton1 = new Singleton1(); private Singleton1(){} public static Singleton1 getIntance(){ return singleton1;
2018-01-12 16:24:06
196
原创 事件分发机制学习笔记
Android菜鸟一枚,做项目的时候经常碰到滑动冲突,于是痛下狠心学了一下事件分发机制,并且通过翻看源码,稍有心得。事件分发的基础说到事件的分发机制,不得不提到三个方法: dispatchTouchEvent(MotionEvent ev); onInterceptTouchEvent(MotionEv
2018-01-05 20:37:14
230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人