- 博客(58)
- 资源 (2)
- 收藏
- 关注
原创 Android阴影最完整解析
Android系统带的阴影elevationandroid:elevation="" 给控件添加一个浅灰色的阴影,控件必须设置背景android:background=""而且控件要设置layout_margin阴影才会显示出来。这个方式有个缺点,无法修改阴影颜色,无法设置阴影大小Android系统带的阴影shadowandroid:shadowColor="" 阴影颜色android...
2019-05-06 18:06:49 3515
原创 App优化
体积优化:资源优化:简单图片自己画,.9图片的使用,把不常用的图片,经常变的图片放到服务端类优化:去掉不用的类,类库,尽量自己写类,不要有太多引用第三方的东西内存优化:避免内存泄漏,使用线程池,释放不用的资源速度优化:算法合理,减少没必要的类的初始化,做缓存...
2020-04-23 09:48:56 376
原创 线程池
Executors类提供了4种不同的线程池:newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingleThreadExecutor1、newCachedThreadPool:用来创建一个可以无限扩大的线程池,适用于负载较轻的场景,执行短期异步任务。(可以使得任务快速得到执行,因为任务时间执行短,可以很快结束...
2020-03-30 16:36:04 167
原创 Android焦点
ViewGroup中有一个mFocued成员来保存子视图中哪个子视图是具有焦点的视图,并且这样一直会递归下去。比如某个视图层次下的根视图ROOT下有A,B,C三个子视图,而B下面又有B1,B2,B3三个子视图,而这时候B3是具有焦点的子视图,那么在B中的mFocued保存的是B3,而ROOT下的mFocued保存的是B。ViewGroup没有焦点并不代表其子视图也没有焦点,这里没有父子制约关系。...
2020-03-27 10:58:22 211
原创 jvm垃圾回收机制
怎么判断一个变量可以回收通过计数器算法和GCRoot可达性算法GCRoot参考:1.虚拟机栈中引用的对象2.方法区中静态属性引用的对象3.方法区中常量引用的对象4.本地方法栈中引用的对象(Native对象)GC 清理垃圾的算法标记清理(容易产生内存间隔)复制算法:资源利用率低,只能利用一半的内存综合俩个方法,把对象按照生命周期放在不同的地方,新生代,老生代,永久代1.所有新生...
2020-03-27 10:19:35 111
原创 Handler机制
每个handler包含一个looper,looper是运行在当前线程的一个循环,每个线程通过ThreadLocal持有一个looper,looper包含一个queue,handler发送消息给queue,looper循环检索queue,如果有,叫交给handler处理...
2020-03-20 10:58:35 97
原创 ThreadLocal
ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本, 这样就不存在线程安全问题,也不会影响程序的执行性能。但是要注意,虽然Thre...
2020-03-20 10:49:22 83
原创 Android进程间通信的方式
一、使用 IntentActivity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle 实现了 Parcelable 接口,可以在不同的进程间进行传输。在一个进程中启动了另一个进程的 Activity,Service 和 Receiver ,可以在 Bundle 中附加要传递的数据通过 Intent 发送出去。二、使用文件共享Wind...
2020-03-20 10:09:28 207
原创 Buffer基本原理
Buffer 类是 java.nio 的构造基础。一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里,数据可被存储并在之后用于检索。缓冲区可以被写满或释放。对于每个非布尔原始数据类型都有一个缓冲区类,即 Buffer 的子类有:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffe...
2020-01-13 14:26:03 5312
原创 String 和 new String()的区别
String str1 = “ABC”String str2 = new String(“ABC”);String str1 = “ABC”; 可能创建一个对象或者不创建对象。如果"ABC" 这个字符串z在java String池中不存在,会在java String池中创建一个String str1= "ABC"的对象。然后把str1指向这个内存地址。之后用这种方式创建多少个值为"ABC"的...
2020-01-09 16:33:22 122
原创 android 10新特性
面向开发者的 Android 10Android 10 围绕三个重要主题构建而成。首先,Android 10 以其先进的机器学习和对新兴设备(如可折叠设备和支持 5G 的手机)的支持走在移动创新领域的前沿。其次,Android 10 的主要关注点之一就是隐私权和安全性,其中近 50 项功能可为用户提供更好的保护、更高的透明度以及让用户更好地控制相关数据。最后,Android 10 可让用户更好地...
2019-11-14 14:44:48 440
原创 android各版本新特性
android 新特性Android版本5.0 (api21)名字L默认情况下,在Android 5.0中,通知现在显示用户的锁定屏幕上,用户可以选择保护敏感信息不被公开,再次情况下,系统会自动删减通知显示的文本。要自定义此删减的通知,请使用setPublicVersion()。Context.bindService() 方法现在需要显式 Intent,如果提供隐式 intent,将引发异常...
2019-10-11 09:41:24 1353
原创 CoordinatorLayout和Behavior
Android5.0提供了一个CoordinatorLayout布局,他能通过Behavior协调子布局之间的交互
2019-10-10 14:11:57 147
原创 android从开机到Application加载全过程
Android系统其实是基于Linux系统的。当我们长按下电源启动手机时,引导芯片开始从固化在ROM里的预设代码开始执行。加载引导程序Bootloader到RAM,然后执行。BootLoader是在Linux操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。在系统内核启动后,便会去设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置,它首先在系统文件中寻找init.r...
2019-09-01 13:47:56 1213
原创 GridView的OnItemClickListener无响应解决
第一解决方案:将ItemView里面button换成textview第二解决方案:设置 ItemView clickable 为 FALSE;
2019-08-30 15:34:45 217
原创 ImageView scaleType属性
ImageView的scaleType的属性值有MATRIX,FIT_XY,FIT_START,FIT_END,FIT_CENTER,CENTER,CENTER_CROP,CENTER_INSIDE.1.android:scaleType=“center”保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size时,多出来的部分被截掉。2.android...
2019-08-15 14:36:08 110
原创 ListView,LinearLayout,RelativeLayout布局性能
ListView 判断给定的view的viewType指明是否可以回收回。viewType < 0是不可以回收。指定忽略的( ITEM_VIEW_TYPE_IGNORE = -1),或者是 HeaderView / (FootViewITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2)是不被回收的。如有特殊需要可以将自己定义的viewTyp...
2019-08-13 11:37:21 268
原创 原生VideoView使用心得
1.MediaController样式单一,并且一直悬浮在phoneWindow上面,如果嵌套在scrollview中,不会随着滚动而滚动。2.activity执行stop会销毁VideoView因为 VideoView 继承了 SurfaceView , 在 Activity 的 onStop() 生命周期中会调用 surfaceDestroyed(), 此时会释放 MediaPlayer,...
2019-08-07 17:39:39 335
原创 android ANR
ANR全称:Application Not Responding,也就是应用程序无响应InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。Service Timeout :前台服务20秒内,后...
2019-07-26 10:09:47 132
原创 禁止NestedScrollView嵌套RecyclerView自动滑动到底部的问题
NestedScrollView第一次子布局添加这俩个属性android:focusable=“true”android:focusableInTouchMode=“true”
2019-07-24 15:08:52 2166 1
原创 Android 常用权限和使用说明
日历读日历 android.permission.READ_CALENDAR 权限定义:1、android.permission.READ_CALENDAR:允许应用获取用户日历数据2、android.permission.WRITE_CALENDAR:允许应用编辑用户日历数据注:日历的读写操作,在日历应用中可以查看对应的日程。典型场景举例:1、制定学习计划、旅行日程;2、火车票预订...
2019-07-12 14:11:58 10393
原创 Android 系统权限
首先要弄清楚几个方法activity.shouldShowRequestPermissionRationale(String permission)0、之前没有拒绝过此权限的申请(第一次安装后请求权限前调用):false1、曾经被拒绝过权限后再调用:true2、曾经被拒绝过权限且不再询问后再调用:falseactivity.checkSelfPermission(Manifest.per...
2019-06-26 14:51:47 264
原创 Can't toast on a thread that has not called Looper.prepare()
Dialog的Dismiss方法可以在主线程和子线程调用。Dialog和Toast的show,必须在主线程中调用
2019-06-13 14:43:15 336
原创 Android无法保存裁剪后的图片
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(avatarFile));//这里只能用Uri.fromFile,不然部分手机会报错,裁剪后无法保存图片不能用FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + “.fileProvider”, file)...
2019-06-11 17:29:30 2736
原创 Android 本地身份证识别
https://github.com/fanbaoying/FBYIDCardRecognition-Android
2019-06-05 17:15:36 746
原创 如何发布类库到jcenter
1.注册bintray账号2.获取PbintrayKeyantelope001是我的bintray账号名,跟着箭头,最后输入密码就可以查看PbintrayKey,保存一会使用。3.在项目的根目录gradle文件中的dependencies节点中添加classpath ‘com.novoda:bintray-release:0.5.0’如果代码注释有中文,在根目录的gradle中还需...
2019-05-21 16:48:19 387
原创 retrofit自动转换成java对象和服务器异常处理
okhttp请求服务器返回的数据一般是json字符串,我们在哪个地方将字符串转成java对象合适呢retrofit提供了一个类MyGsonConverterFactory,我们需要重写这个类的一个方法 @Overridepublic Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] ...
2019-05-20 16:54:55 517
原创 身份证键盘
第一步在xml文件夹下创建idcard_keyboard.xml<?xml version="1.0" encoding="utf-8"?><Keyboard xmlns:android="http://schemas.android.com/apk/res/android"android:horizontalGap="2dp"android:verticalGap="...
2019-05-07 17:14:26 619
原创 Android的uri
在Android中,为了使用数据集中管理模式,使用了ContentProvider来进行数据管理,在使用ContentProvider进行数据交互时就需要用到Uri。为了让客户端程序能够使用你的数据,你必须要定义一个公开的Uri,它由一些固定格式的文字组成,可以分成下面几个部分:...
2019-04-30 13:47:45 267
原创 Toast自定义
private void midToast(String str, int showTime){LayoutInflater inflater = getLayoutInflater();View view = inflater.inflate(R.layout.view_toast_custom,(ViewGroup) findViewById(R.id.lly_toast));Ima...
2019-04-30 13:37:59 109
原创 Scrollview的滑动到底部自动加载
@Scrollview的滑动到底部自动加载public class ObservableScrollView extends ScrollView {private boolean loadComplete = true;//是否加载完成private boolean canLoadMore;//是否可以上拉加载public ObservableScrollView(Context co...
2019-04-26 17:43:10 779
原创 Java线程间通信
@Android线程间通信正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。如何让两个线程...
2019-04-25 13:55:42 306
原创 android view 绘制流程
@view 绘制流程DecorView是一个应用窗口的根容器,它本质上是一个FrameLayout。DecorView有唯一一个子View,它是一个垂直LinearLayout,包含两个子元素,一个是TitleView(ActionBar的容器),另一个是ContentView(窗口内容的容器)。关于ContentView,它是一个FrameLayout(android.R.id.conten...
2019-04-23 10:29:58 128
原创 android动态权限
@android动态权限Android版本23以上添加了动态权限,也就是Android M(23)如何使用动态权限Activity和fragment都有权限申请的方法 activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, reqCod...
2019-04-16 14:35:19 259
原创 Retrofit解析
@Retrofit 解析解析的原因我想给Service的每个body加上基本参数,如platform,version等解析的收获我发现所有的service经过一个动态代理代理了所有方法,然后解析service方法的参数和返回值(获取参数的方式是通过反射方法的注解得到)。然后把参数作为okhttp的参数执行请求,请求回调中将结果解析成service方法的返回值,再通过rxjava的Obser...
2019-04-08 17:24:04 152
原创 CAS
@CASCompare And Set(或Compare And Swap),CAS是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)、新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前返回该位置的值。CAS有效地说明了“我认为位置V应该包含...
2019-04-03 14:51:11 170
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人