
Android 基础
文章平均质量分 63
探索Android的无限可能,掌握基础,开启你的移动开发之旅!立即学习,成为Android开发高手!
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
@ZhangJun
【资深 Android 架构师】10 年 + 系统层 / 应用层全栈开发经验,深耕智能电视(TV/STB)、物联网(智能音箱 / 无人售货机)等领域,擅长系统定制与行业解决方案设计。
展开
-
函数式编程和响应式编程
在程序开发中,a=b+c;赋值之后,b或者c的值变化后,a的值不会跟着变化。响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。函数式编程函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会产生副作用(后面我们马上会谈到)的编程方式。FP 核心思想强调:声明式代码 —— 程序员应该关心是什么,让编译器和运行环境...原创 2017-06-12 21:37:57 · 10714 阅读 · 0 评论 -
Android面试-操作系统
1. 进程和线程的区别。 要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小只与处理机的位数有关,一个16位长处理机的进程空间大小为216,而32位处理机的进程空间大小为232。进程至少有5种基本...原创 2016-10-17 16:14:12 · 871 阅读 · 1 评论 -
Ubuntu配置Java环境变量
1、到JAVA官网下载jdk-8u60-linux-x64.gz,选择适合自己编译环境的JDK下载。2、解压文件,修改文件路径及文件名:$ sudo mkdir /usr/lib/jvm$ sudo tar zxvf jdk-8u60-linux-x64.gz -C /usr/lib/jvm$ cd /usr/lib/jvm$ sudo mvjdk1.8.0_60 java3、......原创 2015-12-15 22:18:05 · 9661 阅读 · 1 评论 -
Android常用第三方框架整理
缓存 DiskLruCacheLRU(Least Recently Used),即近期最少使用算法。使用缓存策略, 对网络上下载的图片等资源文件进行缓存, 当再次请求同一个资源url时, 首先从缓存中查找是否存在, 当不存在时再从网络上下载。采用缓存, 除了提高获取资源的速度, 也对减少使用用户手机上的流量有很好的作用. 核心思想是当缓存满时,会优先淘汰那些最少使用的缓存对象。采用LRU算法的缓存有...原创 2017-06-01 17:19:48 · 7784 阅读 · 1 评论 -
volume、partition和disk的区分
disk 指的是一个磁盘,即计算机意义上的一块硬盘;partition 指的是分区,平时我们所说的C盘,D盘,E盘,实际是一个个分区,一般来说一个磁盘可以分24个分区左右,但是一般我们不分那么多区;volume则是指的卷标,和分区对应,一个分区一个卷标,当你有很多个分区的时候,卷标就像书签一样,可以自己写个标记,方便区分各个分区。......原创 2019-11-23 17:18:03 · 13942 阅读 · 1 评论 -
Android源码和SDK的区别
SDK与源码的区别原创 2022-06-07 20:27:17 · 1396 阅读 · 0 评论 -
" "和null的区别
String str1 = null; // str引用为空String str2 = “”; // str引用一个空串也就是null没有分配空间,”“分配了空间,因此str1还不是一个实例化的对象,而str2已经实例化。注意因为null不是对象,”“是对象。所以比较的时候必须是 if(str1==null){…}和if(str2.equals(“”)){…}。对象用equals比较,null用原创 2017-02-25 20:44:12 · 753 阅读 · 0 评论 -
Java并发编程---线程池的使用
一般我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。Java中创建线程池很简单,只需要调用Executors中相应的便捷方法即可,比如Executors.newFixedThreadPo原创 2022-02-18 12:13:01 · 648 阅读 · 0 评论 -
Java中多线程通信实例:生产者消费者模式
线程间的通信:其实就是多个线程在操作同一个资源,但是操作的动作不同当某个线程进入synchronized块后,共享数据的状态不一定满足该线程的需要,需要其他线程改变共享数据的状态后才能运行,而由于当时线程对共享资源时独占的,它必须解除对共享资源的锁定的状态,通知其他线程可以使用该共享资源。Java中的 wait(),notify(),notifyAll()可以实现线程间的通信。生产者–消费者问题是典原创 2017-10-21 17:01:42 · 1142 阅读 · 0 评论 -
Java 多态
Java 多态多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:多态性是对象多种表现形式的体现。现实中,比如我们按下 F1 键这个动作:如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持...原创 2019-10-28 20:17:19 · 262 阅读 · 0 评论 -
Java笔记之组合大于继承
继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使是在没有多态关系的情况下。是否使用继承的规则是继承只能用在类之间有“父子”关系的情况下。 不要仅仅为了代码复用而继承。当你使用组合来实现代码复用的时候,是不会产生继承关系的。过度使用继承(通过“extends”关键字)的话,如果修改了父类,会损坏所有的子类。这是因为子类和父类的紧耦合关系是在编译期产...原创 2018-04-22 20:24:14 · 1396 阅读 · 0 评论 -
Effective Java阅读笔记
最近在看Effective Java这本书,在这里简单记录下书中78条建议,因为有一定的编程经验,书中一大半条理规范都在践行中,还有一部分在用但是不知道为什么这么用,当然如枚举、并发等,还是需要多加以实践。考虑用静态工厂方法代替构造器遇到多个构造器参数时要考虑用构建器用私有构造器或者枚举类型强化Singleton属性通过私有构造器强化不可实例化的能力避免创建不必要的对象消除过期的对...原创 2018-03-31 17:25:24 · 301 阅读 · 1 评论 -
Comparable & Comparator用法
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。原创 2017-03-16 13:41:52 · 591 阅读 · 0 评论 -
Java 泛型
Java 泛型原创 2017-02-25 20:54:44 · 447 阅读 · 1 评论 -
Java单例模式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、枚举单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对原创 2016-08-30 18:19:08 · 514 阅读 · 0 评论 -
关于Java的clone方法和Cloneable接口
Effective Java第11条:谨慎地覆盖clone,仔细阅读后,我们可以更进一步得出结论:其他接口不要继承(extends扩展)Cloneable接口,其他类不要实现(implements)该接口。如果真的需要对象深度(内存)拷贝,可以考虑使用序列化和反序列化代替实现。对于clone方法,它本身是浅拷贝,如果拷贝的类持有其他类变量,必须让这个类变量的定义类实现Copy Construc......原创 2018-04-09 00:04:18 · 1564 阅读 · 0 评论 -
抽象类和接口差异性对比
相同点1、接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承;2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通类都必须实现这些抽象方法;不同点1、设计目的上1)接口作为系统与外界交互的窗口,接口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式来提供);对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这原创 2017-08-05 14:39:00 · 500 阅读 · 0 评论 -
Java 继承
继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。生活中的继承:兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。虽然食草动物和食肉...原创 2019-10-28 10:43:36 · 240 阅读 · 0 评论 -
Java 异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error。如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据...原创 2019-10-28 21:20:13 · 295 阅读 · 0 评论 -
面向对象语言知识盘点
面向对象知识概要原创 2019-02-23 15:12:06 · 270 阅读 · 1 评论 -
Java集合List、Set与Map区别及适用场景总结
List和Set都是继承自Collection接口,Map则不是List元素有放入顺序,元素可重复,和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。Set元素无放入顺序,元素不可重复,重复元素会覆盖掉,Set检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 Map是一个接口,适合储存键值对的数据线程安全集合类与非线程安全......原创 2018-04-10 23:35:38 · 4279 阅读 · 0 评论 -
Java 封装
Java 封装在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,...原创 2019-10-28 09:05:57 · 223 阅读 · 0 评论 -
Java 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含......原创 2019-10-28 20:47:16 · 289 阅读 · 1 评论 -
过滤 List 容器中重复(相同)的数据元素
Set< ? > set = new HashSet(list);list.clear();list.addAll(set);原创 2017-06-03 12:04:04 · 2235 阅读 · 0 评论 -
为什么java构造函数的构造器只能在第一行写this() 或者super()
super()在第一行的原因就是:子类有可能访问了父类对象, 比如在构造函数中使用父类对象的成员函数和变量, 在成员初始化使用了父类, 在代码块中使用了父类等, 所以为保证在子类可以访问父类对象之前要完成对父类对象的初始化this()在第一行的原因就是:为保证父类对象初始化的唯一性. 我们假设一种情况, 类B是类A的子类, 如果this()可以在构造函数的任意行使用, 那么会出现什么情况呢? 首...原创 2019-02-23 14:18:14 · 1159 阅读 · 0 评论 -
Java 变量类型
Java 变量类型在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ = value][, identifier [= value] ...] ;格式说明:type为Java数据类型;identifier是变量名;可以使用逗号隔开来声明多个同类型变量。Java语言支持的变量类型有:类变量:独立于方法之外的变量,用 static 修...原创 2019-10-26 11:47:23 · 237 阅读 · 0 评论 -
Java格式化数字
DecimalFormat df = new DecimalFormat ("000");String string = "1";try { int number = Integer.parseInt(string); DecimalFormat df = new DecimalFormat ("000"); string = df.format(number); /原创 2017-02-25 21:04:20 · 6456 阅读 · 0 评论 -
关于Java抽象类使用总结
抽象类要用abstract修饰,可以没有抽象方法; 一个类只要存在一个抽象方法则必须声明为抽象类;子类继承抽象类,可以重写父类的非抽象方法,如果子类不是抽象类,必须要实现父类的抽象方法,如果是抽象类,可以继续声明为抽象方法;抽象类可以应用多态; 抽象类不能直接实例化,如果要实例化,抽象类变量必须指向非抽象子类的对象;抽象方法只能申明,不能实现–abstract void func();原创 2017-08-05 14:28:40 · 477 阅读 · 0 评论 -
Java字符串比较
1、比较两个字符串内容的话,用a.equals(b)比较,其中a,b是两个字符串,用a==b的话比较的是a和b的内存地址;2、如果一个字符串是变量,另一个字符串是常量的话,一定要把常量写在前面,变量写在后面(即括号内),这样写的原因只有一个,避免报空指针异常。如:a是常量字符串,b是变量字符串,则一定要写成a.equals(b),不能写成b.equals(a),否则如果b为null的话,绝对报...原创 2016-10-19 21:33:46 · 627 阅读 · 0 评论 -
Java 重写(Override)与重载(Overload)
重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能...原创 2019-10-28 20:27:20 · 201 阅读 · 0 评论 -
java中的==、equals和hashCode区别
前言 java中==、equals()、hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢?关于== ==是容易理解的,java设计java就是要比较两个对象是不是同一个对象。 对于引用变量而言,比较的时候两个引用变量引用的是不是同一个对象,即比较的是两个引用中存储的对象地址是不是一样的。 对于基本数据类型原创 2017-02-25 20:39:23 · 623 阅读 · 0 评论 -
关于Java接口使用总结
定义抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更彻底,则可以提炼出一种更加特殊的”抽象类“——接口(interface)。接口里不能有普通方法,接口里的所有方法都是抽象方法。Java 8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现。原创 2017-08-05 14:35:16 · 876 阅读 · 0 评论 -
Java锁机制--synchronized
在理解锁机制前,我们需要了解线程安全和并发相关的知识。Java内存模型lock(锁定):作用于主内存的变量,它把一个变量标识为一个线程独占的状态;unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;read(读取):作用于主内存的变量,它把一个变量的值从主内存传送到线程中的工作内存,以便随后的load动作使用;load(载入):作用原创 2017-06-09 22:37:29 · 547 阅读 · 0 评论 -
机顶盒相关专业名词阐释
机顶盒相关名词阐释原创 2016-10-04 22:50:27 · 3453 阅读 · 0 评论 -
Android TV CTS 测试认证汇总
1、认识CTS1.1、Android CTS认证测试服务流程 CTS(全称Compatibility Test Suite)认证是获得Google推出的Android系统中Android Market服务的前提。通过这一测试,我们才能得到Android Market的使用许可。 CTS兼容性测试的主要目的和意义在于使得用户在Android系统的应用过程......原创 2015-10-22 08:48:05 · 8590 阅读 · 2 评论 -
Android TV Menu 3D星体旋转效果
在Android中,如果想要实现3D动画效果一般有两种选择:一是使用Open GL ES,二是使用Camera。Open GL ES使用起来太过复杂,一般是用于比较高级的3D特效或游戏,并且这个也不是开源的,像比较简单的一些3D效果,使用Camera就足够了。一些熟知的Android 3D动画如对某个View进行旋转或翻转的 Rotate3dAnimation类,还有使用Gallery( G......原创 2016-09-10 20:03:24 · 14774 阅读 · 24 评论 -
OTT TV 与 IPTV 的区别
IPTV和OTT TV的区别原创 2022-06-07 17:16:46 · 2572 阅读 · 0 评论 -
Android TV热键(快捷键、组合键)实现
TV上一些特殊的功能入口、串口打印开关、adb调试开关、部分菜单的显示隐藏等都可以通过热键来控制。一般组合键选用某个功能键+一串数字即可,我们可以将其封装成工具类,这里快捷键,我使用F1和几个数字键组合public class SpecialKey implements Constants { private static SpecialKey instance = null; priv...原创 2017-08-08 19:54:59 · 4298 阅读 · 3 评论 -
解决Android TV开机后页面首次加载无焦点问题
因为开机后android默认是在Touch模式,而TV交互需要通过焦点控制,所以我们需要页面一显示,就离开Touch模式。怎么离开Touch模式呢?我们知道,当用户开始通过触摸屏与设备交互的时候,设备就进入Touch Mode模式;当用户开始通过键盘与设备交互的时候,设备就退出Touch Mode模式。...原创 2017-08-08 18:29:11 · 3208 阅读 · 7 评论 -
Android TV焦点框动画效果
背景意义对于TV端来说,各种Android事件的处理,依赖于遥控操作,不像移动终端可以通过Touch主观感觉焦点存在位置,TV焦点需要通过图像显示出来. 因此焦点框显示效果非常影响用户体验,一般焦点效果常见的是控件背景加高亮框,或通过触发事件切换背景,亦或伸缩控件大小.实际上,我们可以实现具有动画效果的焦点框. 实现的动画效果为:使用平移动画绘制焦点框移动轨迹,同时焦点框随着控......原创 2015-12-23 17:33:49 · 11512 阅读 · 16 评论