自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(204)
  • 资源 (2)
  • 收藏
  • 关注

原创 android屏幕刷新显示机制

android屏幕刷新显示机制前言本文是通过阅读各种文章及代码,总结出来的,其中难免有些地方理解得不对,欢迎大家批评指正。显示系统基础知识定义在一个典型的显示系统中,一般包括CPU、GPU、display三个部分, CPU负责计算数据,把计算好数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到buffer里存起来,然后display(有的文章也叫屏幕或者显示器

2016-12-30 10:15:18 17604 4

原创 从源码看invalidate和requestLayout的区别

从源码看invalidate和requestLayout的区别invalidate和requestLayout经常被用来刷新界面,有的时候2个一起用,TextView的源码里也经常看到2者一起用的情况。什么时候该用哪个呢?为什么有的时候2个要一起用呢?本文所从源码是6.0.1来研究下2者的原理和区别以及如何使用。测试工程InvalidateDemoInvalidatePFLAG_DRAWING_CA

2016-10-19 14:46:14 13921 9

原创 activity动态设置主题

一般来说主题都是在manifest里设置的,那有没有办法在代码里设置呢?代码在ChangeTheme内在activity创建前动态设置主题比如我现在有activity A1,A2,B,A1可以进入B,A2也可以进入B,A1进入B,此时B想用红色主题,A2进入B,此时B想用绿色主题。how to?用setTheme,注意这个方法必须写在super.onCreate(savedInstanceState

2016-08-24 10:22:40 19261 3

原创 android事件分发

事件分发在Android中非常重要,在滑动冲突,下拉刷新,嵌套滑动的时候都需要非常清楚事件分发的机制,才能写好对应的处理代码。曾经以为我对事件分发已经很清楚了,也写过几篇代码,但是总感觉没有完全说清楚,今天再从代码的角度分析一遍事件分发机制,希望以后遇到所有事件分发的问题,都能在这里找到答案。 先看几个问题,如果这些问题你都知道答案,那本篇文章就不用看了。问题1、如果拦截了某个事件,是否就会交由本

2016-08-08 20:46:35 1404

原创 庖丁解牛之ScrollView

庖丁解牛之ScrollView前言ScrollView可以说是android里最简单的滑动控件,但是其中也蕴含了很多的知识点。今天尝试通过ScrollView的源码来了解ScrollView内部的细节。本文在介绍ScrollView时会忽略以下内容:嵌套滑动,崩溃保存,Accessibility。 ScrollView是一种控件,继承自 FrameLayout,他的子控件远远大于ScrollVie

2016-08-05 12:35:36 15069 4

原创 android进程重启及activity恢复

经常听到有人说android内存不足时会回收activity,这是不对的,android内存不足时会去查后台进程,杀死某些进程来获取内存。杀activity的说法是不对的,可能是受了官方某些文档的误导。android官方文档上有这么一段话,有点误导的成分。If an activity is paused or stopped, the system can drop the act

2016-06-15 20:59:20 16280 14

原创 linealayout垂直布局,控件置为底部

需求:要在线性布局里实现以下效果,有个按钮位于底部我们通常想到layout_gravity设置为bottom,但是实际上,在vertical的linealayout里,layout_gravity=bottom是无效的,只能设置水平的居左,居中,居右。那怎么办呢?在button外面包一层LinearLayout就好了,2种方法,1在外面包个vertical的Line

2015-06-01 18:27:49 20688 2

原创 android性能优化

1、SparseArray替代HashMap<Integer, Object>更加节省内存,某些情况下更高效,参考http://liuzhichao.com/p/832.html2、用一维数组代替多维数组多维数组占的内存空间会多很多,效率也低关于数组的内存空间可以参考http://www.javamex.com/tutorials/memory/object_mem

2015-03-04 20:59:08 1089

原创 Git忽略规则.gitignore不生效

原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。`git rm -r --cached .在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。

2023-06-25 20:13:21 121

原创 泛型的点点滴滴

泛型继承public class MainPage<T extends Apple> extends Page<T>

2022-01-19 16:49:55 147

原创 java泛型通配符

泛型 generics协变 co-variant逆变 Contra-variance通配符类型 wildcard type数组是协变的我们可以把一个dog的数组,赋值给Pet数组,因为Pet是Dog的基类。Dog[] dogs = { new Dog() };Pet[] pets = dogs;在pets这里,他已经不知道数组里的内容是Dog了,他可能会执行如下操作。pets[0] = new Cat();这个时候编译是没问题的,但是运行会报错,抛出ArrayStoreExcepti

2022-01-17 17:17:52 407

原创 android全屏对话框,覆盖状态栏 尝试了多种方法 效果都不好

public class FullScrreenDialog extends Dialog { public FullScrreenDialog(Context context, List<FuncGridItem> shareList) { //super(context,R.style.Dialog_FullScreen); super(context); } @Override protected void onCreat

2021-06-23 17:45:05 1057 2

原创 git操作

git diff在指定目录进行diff,后面的.也可以改成./aaagit diff 1.0.0 2.1.9.88 .

2021-05-25 10:25:39 102

原创 device file explorer不显示 原因是root手机给了

解决方案打开 超级授权点击adb,把访问权限改为拒绝,插拔一下手机https://stackoverflow.com/questions/46461475/android-studio-3-all-versions-device-file-explorer-nothing-to-show

2021-04-14 17:13:59 812

原创 linux常用命令find/grep

find从当前目录下根据文件名递归搜索文件find . -name main.dartrefhttps://blog.csdn.net/ydfok/article/details/1486451

2020-06-16 15:37:37 241

原创 集合类常见用法

hashmap遍历Map map = new HashMap();Iterator iter = map.keySet().iterator();while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key);}Map map = new HashMap();Iterator iter = map.entrySet().iterator();while (iter.hasNext())

2020-05-23 21:02:59 197

原创 Could not resolve io.flutter:arm64

换了个电脑,新建flutter工程,提示Could not resolve io.flutter:arm64_v8a_debug 错误,意思是这个库下载不下来。修改了下maven仓库地址,可以下载下来了(非常慢,可能花了20min)allprojects { repositories { maven { url "http://download.flutter.io" } maven { url "https://storage.googleapis.com

2020-05-10 22:18:31 1139

原创 git忽略已经被提交的文件

现在项目的根目录放了 .gitignore 文件,并且git远程仓库的项目根目录已经有了 logs文件夹。目录像这样logs/*.log正确的做法应该是:git rm --cached logs/xx.log,然后更新 .gitignore 忽略掉目标文件,最后git commit -m “We really don’t want Git to track this anymore!”...

2020-05-09 19:57:44 255

原创 Android Studio编译时出现GC overhead limit exceeded

修改下gradle.property,内存配置大一点即可org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError

2020-03-13 14:18:41 765

原创 android常用adb命令

查看activity1、查看栈顶activity的名字adb shell dumpsys activity | grep "mFocusedActivity"结果如下mFocusedActivity: ActivityRecord{bcab688 u0 com.youkuchild.android/.videohome.ChildAudioHomeActivity t57193}这个...

2020-03-08 11:26:35 199

原创 mac下的各种sed、grep、ag命令查看日志好用

删除文件的前100行,注意mac上要加个空字符串sed -i "" '1,100d' 404.log

2020-02-26 16:20:56 1902

原创 多线程安全

这里写自定义目录标题容器容器list使用CopyOnWriteArrayList,不使用vector或者arraylist。arraylist不支持同步。vector存在ConcurrentModificationException的问题

2019-12-16 17:32:44 109

原创 js学习笔记2-解构赋值

学习廖雪峰 https://www.liaoxuefeng.com/wiki/1022910821149312/1023021187855808从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值。什么是解构赋值?我们先看看传统的做法,如何把一个数组的元素分别赋值给几个变量var array = ['hello', 'JavaScript', 'ES6'];var ...

2019-10-15 23:42:02 208

原创 js学习笔记

js开发环境chrome的开发工具(Developer Tools)里的控制台(console)是运行JS的理想环境如何打开:1、直接进入:option + command + J (mac)ctrl + shift + J (windows/linux)2、开发者工具进入:快捷键F12 或者option + command + I (mac)ctrl + shift + I (...

2019-10-15 22:30:55 278

原创 android历史版本

API等级1:Android 1.0API等级2:Android 1.1 Petit FourAPI等级3:Android 1.5 CupcakeAPI等级4:Android 1.6 DonutAPI等级5:Android 2.0 ÉclairAPI等级6:Android 2.0.1 ÉclairAPI等级7:Android 2.1 ÉclairAPI等级8:Android 2.2 ...

2019-09-25 15:37:26 222

原创 android 常用logcat命令

adb logcat 一般用法是 [adb] logcat [<option>] ... [<filter-spec>] ...选项说明-c清空缓冲区-e , --regex=只输出日志消息与 匹配的行,其中 是一个正则表达式-f 将日志消息输出写入 。默认值为 stdout-s根据tag过滤,相当于过滤器规范 ...

2019-09-07 23:20:48 356

原创 ROOM新手入门

room框架是google出品打orm框架,闻名已久,今日入门学习1、先写数据实体类,这个实体对应数据库中的一张表@Entitypublic class User { @PrimaryKey private int uid; @ColumnInfo(name = "first_name") private String firstName; @Co...

2019-09-06 23:50:58 272

转载 databinding学习

主要内容来自 https://www.jianshu.com/p/bd9016418af2DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM 相对于 MVP,其实就是将 Presenter 层替换成了 ViewModel 层。DataBinding 能够省去我们一直以...

2019-08-24 22:41:31 104

原创 帧率

单页面掉帧数据收集命令:页面打开前请执行重置命令:adb shell dumpsys gfxinfo 【package name】reset需收集时执行:adb shell dumpsys gfxinfo 【package name】refhttps://www.jianshu.com/p/c2da3e0d5dd8https://www.jianshu.com/p/fae1d533597...

2019-08-07 22:44:52 322

转载 安卓帧渲染数据获取方式小结

文章目录通过 onDraw() 获取帧数据首先解释一下文章标题中的“帧渲染数据”。“帧渲染数据”是指,完成渲染一帧的耗时。这是计算...

2019-08-07 21:39:57 1228

转载 Activity的创建流程

Activity的创建流程如下所示:获取LoadedApk对象。创建Activity对象。创建Application对象。创建ContextImpl对象。执行Activity的onCreate()回调方法。public final class ActivityThread { private Activity performLaunchActivity(Activit...

2019-07-15 00:18:47 1517

原创 effecttive java 读书笔记

1、考虑用静态工厂方法代替构造器优点静态工厂方法有名称可以复用对象,不用每次都去构造,提升性能,比如Boolean.valueOf(boolean)可以返回原返回类型的任何子类型对象。这样可以隐藏类的实现,使得API非常简洁可以利用类型推导,在创建参数化类型实例的时候,使得代码更加简洁缺点类如果不含有共有的或者受保护的构造器,无法被子类化。其实我们可以用保护型的构造器解决这个问题...

2019-07-09 23:15:50 254

原创 线程同步之wait和notify、notifyall原理

线程同步的时候比较普世的方法就是wait和notify/notifyall来搭配使用,如下所示,这段非常的经典,用于同步过程绝对安全。package com.company;public class A { private boolean condition; private Object lock; public void work() { ATh...

2019-07-07 22:44:36 1094 1

原创 去掉启动页和首页的转场动画

Intent intent = new Intent(getActivity(),SearchListActivity.class);startActivity(intent);getActivity().overridePendingTransition(0, 0);@Overrideprotected void onPause() { overridePendingTransiti...

2019-06-24 16:08:01 317

原创 activity的oncreate里面start另一个activity

第一个activity的oncreate和onresume都会走HOncreateHOnResumeHonPauseGOncreate

2019-06-22 11:18:14 824

原创 git撤销操作

已commit未push如何撤销?撤销到上一个版本git reset --hard HEAD^

2019-06-18 09:49:34 819

原创 class小技巧

asSubClass可以把Class类型转化为一个泛型的<? extend XXX>类型,并且做类型校验。 public <U> Class<? extends U> asSubclass(Class<U> clazz) { if (clazz.isAssignableFrom(this)) retu...

2019-06-16 22:26:29 374

原创 map和json的toString

通常传参数有2种方式,使用map的方式,JSON的方式,这里举个例子。public class Book { public String author; public int pages;}注意如下s1和s2结果是不一样的,一般我们使用的json方式,也就是s1的结果 Book book = new Book(); book.author="luxun...

2019-06-03 15:47:06 823

原创 gradle版本与gradle android studio 插件版本

gradle版本 dependencies { classpath 'com.taobao.android.gradle:mtl-plugin:2.1.0.youku_db-SNAPSHOT' classpath 'com.android.tools.build:gradle:2.1.0' }gradle插件版本#Mon Dec 28 10:0...

2019-04-29 09:37:29 361

原创 aac架构学习-android-lifecycles代码解析

前言本文将通过lifecycle代码的阅读理解,来学习aac架构。代码地址 https://github.com/googlecodelabs/android-lifecycles.git代码里的activity继承自 AppCompatActivity,而AppCompatActivity继承自FragmentActivity,这个FragmentActivity和我们以前见到的地址可不一...

2019-03-24 23:55:35 326

genymotion的arm兼容包

genymotion的arm兼容包,有了他,妈妈再也不用担心INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

2016-06-23

jclasslib-windows

jclasslib,阅读class代码的利器,可以修改class文件,优秀的逆向工具

2015-04-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除