自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学无止境

学如逆水行舟,不进则退

  • 博客(382)
  • 资源 (7)
  • 问答 (4)
  • 收藏
  • 关注

原创 TV TimeShift和PVR的区别

Timeshift是在PVR菜单下,PVR菜单下一般有两个功能一个是刻录功能,一个是Timeshift功能,这两个功能都需要u盘或者内存卡的支持,刻录时把当前的节目刻录进优盘想看的时候还可以打开看,Timeshift的作用是暂停当前画面,比如你有事情离开了,然后你就可以启动Timeshift功能,这时候画面就会静止了,等你回来以后点击播放,他就会继续你离开前的地方播放。还有一点是Timeshift其

2017-10-25 19:40:12 1815 1

原创 Kotlin传递可变长参数给Java可变参数方法

在Kotlin中传递可变长参数(varargs)给Java中的可变参数(varargs)方法是非常简单的。Kotlin支持将可变长参数传递给Java方法,反之亦然。以下是如何在Kotlin中调用一个Java方法的示例,该方法接受可变长参数。符号用于标记一个参数作为可变长参数传递。但在这个例子中,因为Java方法已经声明为接受可变长参数,所以你可以直接传递多个参数,而不需要使用。如果你有一个Kotlin函数,它接受可变长参数,并且你想将这些参数传递给一个Java方法,你可以使用。语法告诉Kotlin将。

2017-10-25 11:15:47 7541 1

原创 Java中多线程通信实例:生产者消费者模式

线程间的通信:其实就是多个线程在操作同一个资源,但是操作的动作不同当某个线程进入synchronized块后,共享数据的状态不一定满足该线程的需要,需要其他线程改变共享数据的状态后才能运行,而由于当时线程对共享资源时独占的,它必须解除对共享资源的锁定的状态,通知其他线程可以使用该共享资源。Java中的 wait(),notify(),notifyAll()可以实现线程间的通信。生产者–消费者问题是典

2017-10-21 17:01:42 1101

原创 DataBinding ObseravbleField实体类如何序列化对象

Android推荐序列化采用Parcelable,同时选择序列化的原则是:1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable;2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。...

2017-10-18 10:00:27 1107

原创 Android开发小技巧

setBackgroundResource(0)——可以移除View的背景色Resources.getSystem().getDisplayMetrics().density——可以不用Context也能获取屏幕密度通过重载ViewGroup的dispatchDraw可以实现一个简单的蒙版效果。例如下拉刷新时,可以在contentView上加一层遮罩。 canvas.drawRect(0, mC...

2017-09-02 16:27:31 1384 1

原创 Android TV 将Excel表格解析成json文件

Android TV开发,设置模块一般是一个菜单树,也即多级联动菜单,我们可以做成配置项文件,这样做的好处是,不需要根据每个客户需求去控制菜单列表里的菜单项显示隐藏,减少项目维护成本。那么这个配置项怎么去设计比较好呢?因为需求是产品控制的,我们希望配置项文件由产品来编写和维护,对于产品来说,我们让他去编写json配置文件或者xml文件,有点为难人,术业有专攻,他们更喜欢可视化操作,简单、直观,于是我...

2017-08-19 18:33:47 2734 1

原创 Android Studio常用的Live Templates汇总

newInstance - 在Fragment中生成 newInstance 方法Toast - 生成 Toast.makeText(context, “”,Toast.LENGTH_SHORT).show();fbc - 生成 findViewByIdconst - 定义一个 android style int 常量logd - 生成 Log.d(TAG, “”);

2017-08-09 11:11:29 887

原创 Android TV热键(快捷键、组合键)实现

TV上一些特殊的功能入口、串口打印开关、adb调试开关、部分菜单的显示隐藏等都可以通过热键来控制。一般组合键选用某个功能键+一串数字即可,我们可以将其封装成工具类,这里快捷键,我使用F1和几个数字键组合public class SpecialKey implements Constants { private static SpecialKey instance = null; priv...

2017-08-08 19:54:59 4149 3

原创 解决Android TV开机后页面首次加载无焦点问题

因为开机后android默认是在Touch模式,而TV交互需要通过焦点控制,所以我们需要页面一显示,就离开Touch模式。怎么离开Touch模式呢?我们知道,当用户开始通过触摸屏与设备交互的时候,设备就进入Touch Mode模式;当用户开始通过键盘与设备交互的时候,设备就退出Touch Mode模式。...

2017-08-08 18:29:11 3104 7

原创 Android TV使用属性动画绘制平移焦点框

Android系统一开始就提供了两种实现动画的方式:View Animation(补间动画 Tweened animation)Drawable Animation(逐帧动画 Frame Animation)逐帧动画就不用说了,补间动画可以实现4种基本变换—平移、旋转、缩放、透明度,但是也存在一定的缺点作用对象局限于View没有改变View的属性,只是改变视觉效果动画效果单一...

2017-08-07 16:30:24 1905 4

原创 抽象类和接口差异性对比

相同点1、接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承;2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通类都必须实现这些抽象方法;不同点1、设计目的上1)接口作为系统与外界交互的窗口,接口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式来提供);对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这

2017-08-05 14:39:00 483

原创 关于Java接口使用总结

定义抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更彻底,则可以提炼出一种更加特殊的”抽象类“——接口(interface)。接口里不能有普通方法,接口里的所有方法都是抽象方法。Java 8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现。

2017-08-05 14:35:16 842

原创 关于Java抽象类使用总结

抽象类要用abstract修饰,可以没有抽象方法; 一个类只要存在一个抽象方法则必须声明为抽象类;子类继承抽象类,可以重写父类的非抽象方法,如果子类不是抽象类,必须要实现父类的抽象方法,如果是抽象类,可以继续声明为抽象方法;抽象类可以应用多态; 抽象类不能直接实例化,如果要实例化,抽象类变量必须指向非抽象子类的对象;抽象方法只能申明,不能实现–abstract void func();

2017-08-05 14:28:40 462

原创 如何写好一份技术应聘简历

简历是面试的敲门砖,是自己给公司的第一印象,简历好坏关乎求职成败。我们先看看通用简历的一些标准短小精悍:一页最佳,不超过两页STAR原则:注重说明在什么背景(时间,场所Situation)做过什么样的工作/项目(Task),这个工作/项目最好与所应聘工作相关,怎么做的,和谁一起做的,自己在团队中的角色(Action),最后的结果(Result)真实客观针对性作为攻城狮的一员,当然是关心技...

2017-08-02 14:20:41 3056 1

原创 使用简单工厂模式和反射机制优化MVP数据绑定流程

Android项目无论是采用MVP模式还是MVVM模式,都会有一个View层和Presenter层绑定或者View层和ViewModel层绑定的过程。MVVM模式采用数据绑定框架DataBinding,很多代码都自动生成了,但是MVP模式数据绑定需要我们自己实现。之前维护一MVP项目,View和Presenter绑定采用简单工厂模式,定义一个工厂类,里面有一个静态方法,用于“生产”Presenter...

2017-07-27 18:43:59 3243

原创 Android MVVM开发模式实践

MVVM模式相关概念MVC:(VIew-Model-Controller)早期将VIew、Model、Controller代码块进行划分,使得程序大部分分离,降低耦合。MVP:(VIew-Model-Presenter)由于MVC中View和Model之间的依赖太强,导致Activity中的代码过于臃肿。为了他们可以绝对独立的存在,慢慢演化出了MVP。在MVP中View并不直接使用Model,它...

2017-06-24 15:45:24 2067

原创 函数式编程和响应式编程

在程序开发中,a=b+c;赋值之后,b或者c的值变化后,a的值不会跟着变化。响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。函数式编程函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会产生副作用(后面我们马上会谈到)的编程方式。FP 核心思想强调:声明式代码 —— 程序员应该关心是什么,让编译器和运行环境...

2017-06-12 21:37:57 10619

原创 Android跨进程通信常见方式

由于android系统中应用程序之间不能共享内存,因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式,这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。Activity可以跨进程调用其他应用程序的Activity;   Conten...

2017-06-12 21:16:09 2584 1

原创 Android开发中常用到的设计模式

单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。热门词汇:单例 唯一 私有构造单例模式好处由于单例模式在内存中只有一个实例,减少了内存开销。对于那些耗内存的类,只实例化一次,大大提高性能,尤其是移动开发中。单例模式可以避免对资源的多重占用,例如一个写文件时,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。单例模式可以在系统设置全局的访问点,优化和共享资源访问。适用...

2017-06-12 20:49:20 1295 1

原创 Java锁机制--synchronized

在理解锁机制前,我们需要了解线程安全和并发相关的知识。Java内存模型lock(锁定):作用于主内存的变量,它把一个变量标识为一个线程独占的状态;unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;read(读取):作用于主内存的变量,它把一个变量的值从主内存传送到线程中的工作内存,以便随后的load动作使用;load(载入):作用

2017-06-09 22:37:29 513

原创 Android高阶知识扩展

通信体系Http:HttpClient、HttpConnectionSocketAndroid与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推...

2017-06-05 15:07:15 1073 1

原创 Android IPC 机制---Binder连接池

什么是IPC机制以及IPC机制的种类在Linux中,是以进程为单位分配和管理资源的。出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭。但是,一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项任务,因此要求进程之间必须能够互相通信,从而共享资源和信息。所以,操作系统内核必须提供进程间的通信机制(IPC)。IPC机制种类:采用命名管道(name pipe),消息队

2017-06-04 21:10:37 635 1

原创 Android长连接,怎么处理心跳机制

心跳机制心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。当一台智能手机连上移动网络时,其实并没有真正连接上Internet,运营商分配给手机的IP其实是运营商的内网IP,手机终端要连接上Internet还必须通过运营商的网关进行IP地址的转换,这个网关简称为NAT(NetWork Address Translation),简单来说就是手机终端连接Int...

2017-06-04 20:53:08 2172

原创 Android中弱引用与软引用的应用场景

SoftReference:软引用–>当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法。WeakReference:弱引用–>随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法。WeakReference一般用来防止内存泄漏,要保证内存被虚拟机回收,SoftReference多用作来实现缓存机制(cache)。如...

2017-06-04 20:41:44 2406 2

原创 Android怎么加速启动Activity

减少onCreate的时间,那就精简onCreate里的代码,放在onResume里好了。为了用户体验更好一些,把页面显示的View细分一下,放在AsyncTask里逐步显示,如果你够熟练,用handler更好,这样用户的看到的就是有层次有步骤的一个个的view的展示,不会是先看到一个黑屏,然后一下显示所有view。最好作成动画,效果更自然些。...

2017-06-04 20:33:57 1970 1

原创 Android应用保活方案分享

同时,随着Android系统的不断更新和优化,一些旧的保活方法可能逐渐失效或被限制,因此需要持续关注系统更新和新的保活策略。在Android系统中,保活(保持应用进程一直存活)就是为了让应用在后台持续运行,来实现某些特定的功能,如实时消息推送、定位服务等。:通过将应用的Service设置为前台服务,可以显著提高进程的优先级,使得系统认为该服务是用户当前关心的,从而不容易被系统杀死。:通过一些技巧如启动一个透明的Activity或显示一个空的通知,可以间接提升进程的优先级,使其更不容易被系统杀死。

2017-06-04 20:24:08 606 1

原创 Android怎样退出终止App

使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity。

2017-06-04 20:22:22 1897

原创 Handler、Loop消息队列模型,各部分的作用

Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程),创建的工作线程默认是没有消息循环和消息队列的。如果想让该线程具有消息队列和消息循环,并具有消息处理机制,就需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper...

2017-06-04 12:47:21 1489

原创 Thread、AsycTask、IntentService的使用场景与特点

Thread当一个 Activity 被 finish 之后 ,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。IntentServiceSerivce+handler的结合产物,可以在onHandleIntent直接处理耗时操作。而本地service和远程service不能在onStart方法中执行耗时操作,只能放在子线程中进行...

2017-06-04 12:27:50 2159

原创 Activity缓存方法--onSaveInstanceState

onSaveInstanceState函数用于保存Activity的状态信息(UI控件的状态信息)和用户保存的信息。 onSaveInstanceState函数调用时间当用户按下HOME键时长按HOME键,选择运行其他的程序时按下电源按键(关闭屏幕显示)时从activity A中启动一个新的activity时屏幕方向切换时,例如从竖屏切换到横屏时当系统销毁一个Activity的时候,o

2017-06-04 12:17:19 740 1

原创 Android LayoutInflater(布局填充器)使用指南

inflate()方法一般接收两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传nullinflate()方法还有个接收三个参数的方法重载: inflate(int resource, ViewGroup root, boolean attachToRoot) 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。

2017-06-03 18:38:48 513

原创 Android开发之Intent跳转到系统应用中的拨号界面

IntentUtils.java/** * 拨打电话的intent * * @param phoneNumber 电话号码 */public static Intent newCallPhoneIntent(String phoneNumber) { if (!TextUtils.isEmpty(phoneNumber)) { return new Intent(I

2017-06-03 18:29:34 638

原创 Android cursor遍历数据

数据存储为一行多列时Person person = new Person();double amount = 0;if (cursor != null && cursor.moveToFirst()) { int indexOfPerson = cursor.getColumnIndex(Calculate.COLUMN_PERSON); int indexOfAmount =

2017-06-03 18:25:10 6283

原创 Android onNewIntent()使用

如果一个应用的Activity供多种方式调用启动,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现,然后加上Manifest中对Activity设置lanuchMode=“singleTask”就可以了。 onNewIntent()非常好

2017-06-03 18:20:53 650

原创 Android面试-基础知识

Android四大组件:Activity、Service、BroadcastReceiver、ContentProvider

2017-06-03 12:23:56 975

原创 过滤 List 容器中重复(相同)的数据元素

Set< ? > set = new HashSet(list);list.clear();list.addAll(set);

2017-06-03 12:04:04 2173

原创 Android面试-Java高级

每个处理器通过嗅探在总线上传播的数据来检测自己缓存的信息是不是过期了,当处理器发现自己缓存行对应的内存地址被修改了,就会将当前处理器的缓存行设置为无效状态,当处理器要对这个数据进行修改操作的时候,会强制重新从系统内存里把数据读到处理器缓存里。Java的异常体系是Java编程语言中的一个重要组成部分,用于处理程序运行时可能出现的各种异常情况。但是就算回写内存,如果其他处理器缓存的值还是旧的,在执行计算操作就会有问题,所以在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议。

2017-06-03 12:00:05 666 1

原创 Android shell脚本运用

执行sh脚本chmod +x filename./filename自动运行monkeymonkey.sh#!/bin/bash. ~/.envlogdir=~/monkeyreportmkdir -p $logdirecho "monkey test" >> $logdir/log.txtdate >> $logdir/log.txtwhich adb >> $logdir/log.txt

2017-06-03 11:16:23 2385 1

原创 Android Gradle 高级用法

都是占位符,它们在Gradle构建脚本中被定义,并在构建过程中被替换为实际的值。这样,你就可以根据不同的构建类型(如debug和release)或产品风格(如dev、test和prod)来动态地配置你的AndroidManifest.xml文件了。配置好这些排除规则后,Gradle在构建APK时会自动排除指定的资源文件,从而减小APK的大小。Android Gradle构建系统提供了对资源文件的灵活处理,包括排除某些不需要的资源文件,以减小构建产物的大小。在Gradle构建脚本中,你可以配置。

2017-06-03 10:41:43 1904 1

原创 Android面试--高级知识

在Android开发中,自定义View的机型适配是一个重要的问题,因为不同的设备和屏幕尺寸可能会对View的显示和布局产生不同的影响。以下是一些建议和策略,帮助你在创建自定义View时考虑机型适配:使用dp单位而非px使用dp(密度无关像素)作为自定义View的尺寸单位,而不是px。dp单位会根据设备的屏幕密度进行自动转换,确保在不同设备上显示的一致性。考虑屏幕尺寸和密度在自定义View的构造函数或布局文件中,可以通过获取屏幕的密度和尺寸信息,并据此调整View的属性。支持不同屏幕方向。

2017-06-02 15:12:58 2407

IoT(物联网)开发使用的低功耗蓝牙库

基于BLE4.0版本实现的专为IoT(物联网)开发用的低功耗蓝牙库。

2024-06-02

基于Android无障碍服务实现的自动连点器

基于Android无障碍服务实现的自动连点器,可以自由设置坐标和点击速度,操作简单,功能稳定。

2024-05-10

支持倍速播放的TV视频播放器源码

使用Kotlin语言编写的一款集成了ijkplayer的视频播放器,同时实现了本地和在线播放功能,支持倍速播放。

2018-08-23

gradle-4.1-all.zip离线包

Android Studio3.0对应的Gradle插件离线下载包 官网https://services.gradle.org/distributions/

2017-10-30

Kotlin语法学习

Kotlin语法学习-变量定义、函数扩展、Parcelable序列化、编写工具类、Activity跳转

2017-08-16

仿微信点击图片放大,并可滑动浏览效果demo

仿微信点击图片放大,并可滑动浏览效果

2017-08-16

Android RecyclerView 间距全适配

RecyclerView自定义行列间距

2017-08-16

Android侧滑编辑、删除效果Demo源码

一种易扩展、使用简单的Android侧滑删除控件。

2017-08-16

Android实现一种简易的Banner效果

使用ViewPager简单实现循环播放多个广告图片的banner效果,利用Handler与Runnable配合实现指定功能模块的定时循环执行。

2017-04-05

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

TA关注的人

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