
android
文章平均质量分 58
zhoushenxian
我是一个菜鸟android开发工程师,目前从事电视端开发
展开
-
android jetpack之LifeCycle
jetpack是一整套google为开发者提供的开发库,里面包含很多组件,今天学习下LifeCycleLifeCycle是可以感知生命周期型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护有了LifeCycle像有些内存泄露问题就可以解决了,比如屏幕旋转后数据会有异常,使用了LifeCycle就不会有问题了,现在来看看它的使用定义一个类实现LifecycleObserver原创 2020-09-09 23:07:14 · 436 阅读 · 0 评论 -
android Auto animate layout updates
准备花一段时间把Android官方文档翻译下, 系统的学习下,今天学习layout布局文件自动添加动画https://developer.android.google.cn/training/animation/layout先来个官网介绍Android offers pre-loaded animation that the system runs each time you make...原创 2019-12-26 00:26:39 · 424 阅读 · 0 评论 -
android. 长图加载
长图加载要用到一个关键的类BitmapRegionDecoder,长图加载会使用到bitmap内存复用, 比如view大小是440*654,图片的宽高是440*12000,那么这个时候就要获取图片的宽和高, 跟view的宽和高进行对比,获取到一个缩小比例,那么会得到宽一个比例,高一个比例,用大的比例作为缩放因子,然后配合手势滑动滑动长图import android.content.Conte...原创 2019-08-25 21:01:40 · 2790 阅读 · 0 评论 -
android. 使用stetho调试数据库
facebook的stetho,调试网络或者查看数据库或其他真实很方便,而且引入这个库也很简单第一步:implementation 'com.facebook.stetho:stetho:1.5.0'最新版是1.5.1第二步:初始化在application或者activity中public class MyApp extends Application { @O...原创 2019-08-19 13:31:06 · 288 阅读 · 0 评论 -
android tint使用
tint主要是针对图片进行变色,比如有一个条目点击后 右边的小三角行图片变色,获取很常用就是筛选点击后图片变色,使用tint减少了设计师的压力,还有就是我们也少使用图片 这样就减少了apk的大小<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android....原创 2019-07-19 21:53:13 · 986 阅读 · 0 评论 -
android 谈谈invalidate和postInvalidate方法的区别
看这二个方法的区别只有深入到代码中去看了,首先看invalidate()方法invalidate()分析 public void invalidate() { invalidate(true); }然后到 void invalidateInternal(int l, int t, int r, int b, boolean invalidateCache...原创 2019-07-16 07:10:57 · 627 阅读 · 0 评论 -
android 面试题 谈谈主线程一直循环 为什么不会出现阻塞或者ANR异常
在ActivityThread类中的main方法有段代码: ActivityThread thread = new ActivityThread(); thread.attach(false, startSeq); if (sMainThreadHandler == null) { sMainThreadHandler = thre...原创 2019-07-16 05:52:14 · 2464 阅读 · 0 评论 -
android 面试题 Parcelable与Serializable区别
一、序列化与反序列化由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,而为了达到进程通讯的目的,需要先将数据序列化,而序列化就是将对象转化字节序列的过程。相反地,当字节序列被运到相应的进程的时候,进程为了识别这些数据,就要将其反序列化,即把字节序列转化为对象。有了以上理解,接下来我们认识两个用于序列化和反序列化的接口:java原生的Seriali...原创 2019-07-16 05:32:22 · 1084 阅读 · 0 评论 -
性能优化之 线程优化
线程调度原理在任意时刻,只有一个线程占用cpu,处于运行状态,在多线程并发的情况下,轮流使用CPU的使用权,但是现在是多核的时代, 比如现在很多电脑或者手机是8核的,意思是有8个cpu,让这8个cpu去执行任务,如果是执行任务很多的情况下,cpu是轮流的方式去执行任务的,而这个CPU去执行任务是由cpu去负责调度的,线程调度模型线程调度模型有二类第一类:分时调度第二类: 抢占...原创 2019-07-16 04:25:26 · 6264 阅读 · 0 评论 -
android 面试题谈谈transient关键字
我们知道在Java中只要实现了Serializable接口,这个都可以被序列化,在Android中进行序列化还有一种方式, 就是Parcelable,而且比Java提供的序列话方式性能更高,但是在实际的开发中我们有些类虽然实现了Serializable接口,但是里面的有些属性不想进行序列化,这个时候就可以在这个变量的前面添加transient修饰了,class Rectangle imp...原创 2019-07-16 03:02:36 · 1931 阅读 · 0 评论 -
android 面试题 谈谈深拷贝和浅拷贝
对称拷贝就是将一个对象的属性拷贝到另一个类有着相同类类型的对象中浅拷贝浅拷贝就是按位拷贝对象,它会创建一个新的对象,这个对象有着原始对象属性值的一份精确拷贝,如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址值,因此如果其中一个对象改变了这个地址就会影响其他的对象用demo来测试下public class ShallowCopyTest { ...原创 2019-07-16 02:38:23 · 804 阅读 · 0 评论 -
android 面试题 集合类
java集合类主要由二个根接口派生的,Collection和MapCollection派生的类的结构List集合主要有ArrayList,Vector LinkedList Stack(栈)Vector:已经废弃了,因为它是线程安全 导致效率变慢,ArrayList:底层是由数组组成的,它的读插入和删除速度慢,时间复杂度都是O(n) 但是它的读取元素的效率高 时间复杂度为O(...原创 2019-07-16 00:19:02 · 649 阅读 · 0 评论 -
android aop(三) AspectJ
AspectJ是面向切面编程的一个框架,它遵循了Jvm的语法并扩展了java语言,我们知道一个类想要运行起来,是先javac命令变成.class(字节码) 再由java命令把该类加载到jvm中,而AspectJ就在javac命令在.java 文件转变成.class文件的时候植入一些代码,这是在编译期完成的,不会影响性能但是在使用AspectJ有一些炕,比如:android stud...原创 2019-07-12 16:45:14 · 256 阅读 · 0 评论 -
android aop( 二)实现方式之动态代理
之前说了aop有四种实现方式,其中最不推荐的就是动态代理实现,因为它浸入代码强,不利于维护,但是也要知道,因为其他实现方式里面的原理也用到了动态代理,只是封装更好 用起来更简单比如一个app要收藏或者关注必须是用户已经登陆情况,除非是app可以是游客的情况下登陆也能收藏或者关注,这是另话了,我定义了一个用户行为接口 有收藏和关注方法public interface IUser ...原创 2019-07-12 02:59:27 · 534 阅读 · 0 评论 -
Android 面试题 如何计算一张图片在内存中大小
如何计算图片所占内存大小其实图片所占内存大小和图片本身大小几乎没啥关系, 为什么这么说呢?我现在把一张图片加载到内存去计算它的宽和高,图片如下:你看啊 它的大小是72*72,现在我放在不同的目录下看看它的宽和高,drawable它的宽和高是144*144drawable-hdpi它的宽和高是96*96drawable-mdpi它的宽和高是144*144d...原创 2019-07-08 02:12:33 · 1358 阅读 · 0 评论 -
android 谈谈AOP(一)
学Java有个OOP (Object Oriented Programming)即面向对象编程,它不是一门技术,而是思想,而AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术AOP是OOP的延续,是软件开发中的一个热点,也是很多框架如 java中的Spring框架中的一个重要内容,是函数式编程...原创 2019-07-07 23:38:31 · 491 阅读 · 0 评论 -
android面试题 谈谈强 软 弱 虚引用
首先看类的结构图:t它是在java.lang.ref包下 从上面的单词就知道了Reference是引用的意思,前面的前缀就是所说的软 弱 虚引用,我们通常都是使用强引用, Person person = new Person();Java默认就是强引用,比如上面的new Peson对象,强引用的特点:当内存不足, jvm开始垃圾回收,对于强引用的对象,就算出现OOM异常...原创 2019-07-07 05:37:48 · 643 阅读 · 0 评论 -
android 面试题 谈谈屏幕适配
面试问你屏幕适配,那么你要知道为什么Android要做屏幕适配,因为Android是开源的, 各大厂商不仅可以对软件定制,还可以对硬件定制,这样就造成市场上不同分辨率的手机超多,现在估计得有几万或者几十万种,这就导致android设备的碎片化很严重。所以还是做ios很辛福啊,下面对一些概念弄清楚屏幕尺寸:指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米屏幕分辨率:是指横纵上的像素点 ...原创 2019-07-06 20:25:59 · 4043 阅读 · 3 评论 -
android 面试题 谈谈Handler
Handler几乎每个人都会用,但是如果面试被问到,相信也不是每个人都能回答出来,特别是大点公司,特别喜欢问原理,或者你工作3年以上,别人不再问你怎么用了,而是问你底层实现原理,不然怎么区分你是高级还是中级 ,不给你定级别,工资不好给啊,Handler作用:主要用于异步消息的处理,那么可能好奇,什么是异步消息,我们在学线程这块就知道,线程一般是用于处理比较耗时的操作,就是结果不是马上就能...原创 2019-07-04 23:51:51 · 489 阅读 · 0 评论 -
android 面试题 状态模式
定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类首先从这个名字上看,状态,比如视频播放,它有一些状态,比如 暂停 播放 停止,快速,这些状态是可以切换的,在普通的人们心中可能会定义几个static变量或者枚举的方式来对状态的切换,但是如果新增的需求 可能要修改源代码,这就违背了设计模式的开闭原则,就是对扩展开放 对修改关闭,这个时候就适合用状态...原创 2019-07-04 06:03:07 · 143 阅读 · 0 评论 -
android ThreadLocal使用以及作用
如果想看懂Android中Handler源码,那么ThreadLocal类的作用必须要懂,ThreadLocal的出现解决了线程存存储自己的数据不发生异常,而不是解决线程安全问题,看下例子:package thread;public class ThreadLocalTest { static ThreadLocal<String> threadLocal = new...原创 2019-07-04 01:35:45 · 819 阅读 · 0 评论 -
android 面试题 说说创建线程的几种方式
在Java中一般创建线程有四种方式:第一种:继承Thread,这种创建线程的缺点就是因为Java是单继承,假如是四个线程共享一分资源的话,这种方式就不使用了第二种:实现Runnable接口,一般都是使用第二种,因为Java机制是多实现单继承,第三种Callable 使用这种方式创建线程的好处是可以有返回值,android中AsyncTask源码就会用到,第四种方式就使用线程池了....原创 2019-07-02 20:03:38 · 434 阅读 · 0 评论 -
android 面试题 ArrayList是线程不安全的,请写出例子并给出解决方案
我们知道List集合不安全的是因为add()方法没有使用synchronized,我们知道jdk很早有个Vector类,看看它的add()public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[e...原创 2019-07-02 03:21:59 · 2158 阅读 · 0 评论 -
android 面试题 CAS
首先弄清楚什么是cas:在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这...原创 2019-07-02 02:37:18 · 804 阅读 · 0 评论 -
android. mac. 如何查看jdk安装目录
最近在准备面试, 学习下并发这块,要看下源码,突然不知道jdk安装位置在哪里,可以使用如下命令/usr/libexec/java_home -V注意: V大写的,在此记录下!原创 2019-07-02 01:02:16 · 1020 阅读 · 0 评论 -
android 面试题 请谈谈对volatile的理解
volatile是使用在多线程环境下,单线程使用没啥作用,所以前提是多线程volatile是java虚拟机提供的一种轻量级的Java同步机制,它有三大特性1:保证可见性2:不保证原子性3:禁止指令重排要完全的理解这个volatile要对jvm中的内存模型jmm(Java memory model)理解我们的数据存储能力. 磁盘<内存<cpu(只计算)J...原创 2019-07-01 21:35:52 · 614 阅读 · 1 评论 -
android P系统访问http请求最简单解决方案
在sdk28 也就是P系统 请求是http协议的话会报错:java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by**是我的包名这是因为Google在sdk28做了限制 加强了安全为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序...原创 2019-06-20 14:46:07 · 1368 阅读 · 0 评论 -
android 如何在代码的任意位置为当前的Activity添加view
如果在当前的Activity添加View就很简单 我们可以在布局xml中或者拿到当前的根View去添加一个View就行,如果是在代码的任意位置添加View,我相信不是每个人都会的,这一般有二种做法,第一种做法是使用WindowManager 第二种做法是监听每个Activity然后添加,今天主要讲的是第二种做法,我们知道Activity有addContentView()方法可以添加一个view...原创 2019-02-25 10:25:23 · 4239 阅读 · 0 评论 -
android webview获取h5 中的localStorage中的值
上一个项目失败了,android和ios也不知道啥时候被开,现在只能叫我们暂时给游戏那块做一个扫码登录,然后获取h5中的localstorage中的值,就相当于分享扫码 获取一个邀请码的功能是一样,private void setting() { webview.getSettings().setJavaScriptEnabled(true); webview.getSett...原创 2018-11-08 14:28:18 · 5742 阅读 · 0 评论 -
android 使用代理模式切换不同的框架
我们平时在开发迭代中,随着版本的更新以及需求的变化,可能这时候框架不能达到我们的要求,而这个时候另外有个框架可以达到,那我们如果要换的框架的话,这会涉及很多代码要改动,比如网络框架最早是用xutils,然后volley,现在大部分用的是okhttp,那么我们怎么用一行代码把app项目中的网络请求从volley切换到okhttp呢?而不是去全局改动代码,这样工作量就大了,今天就解决这个问题. 其...原创 2018-05-22 18:00:04 · 975 阅读 · 0 评论 -
android FragmentPagerAdapter与FragmentStatePagerAdapter的区别
很多app的主界面都是底部几个按钮,然后点击切换显示不同的UI展现,这种可以使用Viewpager+fragment的方式实现,原创 2018-05-14 20:44:24 · 1213 阅读 · 0 评论 -
android fragment中EditText长按和点击无效的解决方案
最近在做一个凡人类的聊天项目,有一个功能就是长按文本弹出一个popupwindow,有复制和删除的功能,但是半天发现EditText长按都没效果,查询了半天发现有一个属性android:descendantFocusability="beforeDescendants"把这个属性放在xml中的根目录下就解决了.在这记录下....原创 2018-03-04 19:34:58 · 1430 阅读 · 0 评论 -
android 详解Handler内部源码机制
android 详解Handler内部源码机制原创 2017-12-21 04:17:52 · 309 阅读 · 0 评论 -
android view事件分发
android view事件分发原创 2017-12-18 07:10:44 · 348 阅读 · 0 评论 -
java 代理模式
java 代理模式原创 2017-12-13 00:39:05 · 284 阅读 · 0 评论 -
android retrofit2.0框架的使用介绍
准备学习下retrofit框架的使用,然后封装下,现在不懂retrofit都不意思说自己是android开发,所以也学习下,在github上的地址是:https://github.com/square/retrofit要使用retrofit要引入的库还是挺多的//rxjava引入的包compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'i...原创 2017-12-04 05:03:11 · 2284 阅读 · 0 评论 -
android rxjava框架 1.0 操作符介绍
android rxjava框架 1.0 操作符介绍原创 2017-11-28 01:47:25 · 1601 阅读 · 0 评论 -
android okhttp3框架使用
android okhttp3框架使用原创 2017-11-24 16:54:09 · 1272 阅读 · 0 评论 -
android butterknife框架的简单使用
记得很早之前有个xutils框架,就有这个功能,但是它是通过反射和代理发生在运行时期,所以效率肯定没butterknife框架效率高,今天就简单入门,如何使用:github:https://github.com/JakeWharton/butterknife使用三方框架看下它提供的步骤就行,然后按照说的步骤一步步来一般就ok,第一步:dependencies { compile 'com.ja...原创 2017-11-22 15:24:43 · 1050 阅读 · 0 评论 -
android 内存分析工具leakcanary接入
android 内存分析工具leakcanary接入原创 2017-09-25 17:46:24 · 875 阅读 · 0 评论