自定义博客皮肤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)
  • 收藏
  • 关注

原创 Java 继承

继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。生活中的继承:兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。虽然食草动物和食肉...

2019-10-28 10:43:36 209

原创 Java 封装

Java 封装在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,...

2019-10-28 09:05:57 202

原创 Java 变量类型

Java 变量类型在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ = value][, identifier [= value] ...] ;格式说明:type为Java数据类型;identifier是变量名;可以使用逗号隔开来声明多个同类型变量。Java语言支持的变量类型有:类变量:独立于方法之外的变量,用 static 修...

2019-10-26 11:47:23 210

原创 项目使用git版本控制常用到的一些操作命令

git提交本地分支到远程分支//本地分支未完成或者还存在问题时不能合并,同时需要协作完成,则远程new一个分支。// git commit 命令的-a 选项可只将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中。解决冲突,然后调用git add或git rm将解决后的文件暂存;//git add .// 如果只是修改或者删除了已被Git 管理的文档,是没必要使用git add 命令的。git checkout . #本地所有修改的、没有提交的,都返回到原来的状态。

2019-10-26 11:35:34 379

原创 Android TV框架TIF详解

Android TIF(Android TV input Framework)是Google向电视制造商提供了一套标准的API,用于创建Input模块来控制Android电视。这套API的底层实现的原理是aidl和provider,从而进行了跨进程通信。系统或第三方的应用可以通过TIF获得所有输入(input)的信源(输入的模块包括:搜台模块,MDMI模块,网络模块等),然后通过aidl切台输出到......

2019-10-26 10:27:02 3199 2

原创 Android SpannableString用法

TextView算是Android开发中最最常用的控件了,有的时候,我们要给一个TextView中的显示的文字设置不同的样式或者响应事件,比如同一个TextView中,有的字是红色,有的字是蓝色,有的字点击之后有响应事件,有的点击之后没有响应事件,甚至我们想在TextView中显示一个数学公式等等。那么对于形形色色的需求我们有没有解决方案呢?当然有,一种是使用HTML来解决,另一种就是使用Spa......

2019-10-26 09:42:32 584

原创 Android程序中如何执行shell脚本

在做Android应用时,经常需要执行shell脚本,以快速实现某些功能;在Android应用程序中执行shell脚本可以省去一大堆繁琐的代码,还可以避免不必要的错误;比如:拷贝文件夹时,可以执行shell命令中的 cp 命令达到目的;而在代码中实现拷贝文件夹时,不仅需要编写一大堆繁琐的代码,还容易陷入递归死循环的错误中;比如:获取文件系统的读写权限,只需要执行shell脚本中一句 moun......

2019-10-24 09:33:02 5853 1

原创 Android的IPC方式

Android的IPC方式使用BundleBundle实现了Parcelable接口,Activity、Service和Receiver都支持在Intent中传递Bundle数据使用文件共享这种方式简单,适合在对数据同步要求不高的进程之间进行通信,并且要妥善处理并发读写的问题,SharedPreferences是一个特例,虽然它也是文件的一种,但是由于系统对它的读写有一定的缓存策略...

2019-10-21 20:53:28 239

原创 Android自定义View的实现方式

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种:自绘控件、组合控件、以及继承控件自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的,绘制的代码是写在onDraw()方法中的;组合控件的意思就是,我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件;...

2019-10-21 20:35:51 216

原创 Android虚拟机Art和Dalvik的区别

Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机则被彻底的丢弃,全部采用ART。总之,一句话总结就是:采用ART预先加载代替用时查找以提升应用的性能。ARTART 是一种执行效率更高且更省电的运行机制,执行的是本地机器码,这些本地机器码......

2019-10-21 09:37:53 2303 1

原创 Android View的五种状态值

2019-10-18 16:15:40 497

原创 Android8.0后静态注册广播的用法

在Android 8.0及以后的版本中,由于系统对隐式广播进行了限制,应用不能对大部分的广播进行静态注册。但仍有部分广播可以通过静态注册来接收,例如接收Android开机的广播。对于想要在Android 8.0及以后版本中使用静态注册广播的情况,推荐的做法是发送显式广播。显式广播需要我们指定需要接收广播的应用的包名和广播接收器类名,即一对一发送,也称为单播。具体实现时,可以创建一个Intent对象,并通过setComponent方法设置需要接收广播的应用的包名和广播接收器类名。

2019-10-18 15:27:01 2293 1

原创 Android获取蓝牙设备类型

蓝牙设备可能是手机、电脑、耳机、游戏手柄等,我们可以调用如下方法,获取大的设备分类:bluetoothDevice.getBluetoothClass().getMajorDeviceClass()返回的设备类型有:/** * Defines all major device class constants. * <p>See {@link BluetoothClass.D......

2019-10-18 14:43:41 4346 1

原创 Android蓝牙协议详解

第一代蓝牙:关于短距离通讯早期的探索,使用的是BR技术,此时蓝牙的理论传输速率,只能达到721.2Kbps。第二代蓝牙:新增的技术,使得蓝牙设备的传输率可达3Mbps。第三代蓝牙:核心是,这是一种全新的交替射频技术,支持动态地选择正确射频,传输速率高达24Mbps第四代蓝牙:主推Low Energy低功耗,低功耗功能第五代蓝牙:开启「物联网」时代大门,在低功耗模式下具备更快更远的传输能力和。这两种技术都包括搜索(discovery)管理、连接(connection。

2019-10-18 11:22:58 2371

原创 Android常用的几个logcat命令

系统刚开完机,想完全打印出来,则用logcat,这样它会把缓存里面的都打印出来如果不想打印占用终端,则加个&号,即logcat &如果想把前面的打印清掉,开始现在的打印,则用logcat -c;logcat如果想过滤出代码中Log.d(TAG, “****”) 中TAG的关键字打印,则用logcat -s TAG ,TAG即是你自己定义的字符串如果想打印...

2019-10-18 10:39:29 972

原创 Handler使用注意事项

Handler的主要作用是处理消息和回调,如果在Handler中执行耗时操作(如网络请求、数据库查询等),可能会导致消息处理延迟,影响用户体验。关于防止Activity被finish掉后handler仍在执行造成的内存泄露问题,网上建议将handler定义为静态内部类,并且使用弱引用,但是这样需要等到handler中没有执行的任务后才会回收,性能不高。:这是因为Handler和消息队列是绑定在一起的,发送消息时需要指定Handler,接收消息时也需要在相应的Handler中进行。

2019-10-18 10:29:33 433 1

原创 Android 杀掉当前程序的进程

android.os.Process.killProcess(android.os.Process.myPid());

2019-10-18 10:17:18 1617 1

原创 Android setEnabled使用场景

setEnabled是 Android 开发中用于控制控件是否可以被用户交互的方法。请注意,setEnabled方法只影响控件的可用性,而不会影响其可见性。如果你希望隐藏一个控件,你应该使用方法。同时,你也可以结合使用setEnabled和方法,以更灵活地控制控件的行为和外观。

2019-10-18 10:02:31 4736 1

原创 Android AIDL异步回调实现

AIDL异步回调实现权限验证定义AIDL服务端Service实现AIDL接口客户端实现AIDL回调接口客户端连接服务端客户端调用AIDL接口服务端回调客户端接口权限验证在服务端的AndroidMenifest中定义所需权限 <!-- 声明权限,一般来说,要声明权限的级别,否则在aidl调用时会出现一个bug:先安装client端,后安装service端会导致client端无法......

2019-10-15 19:37:16 4841 1

原创 Flutter 性能调优

Flutter 性能调优Flutter 垃圾回收机制ListView 内存初探ListView内存降低方法汇总固定数据个数,数据驱动UI树中的Widget都采用StatelessWidgetFlutter的三种构建模式(build modes)DebugReleaseProfile调试工具Observatory详细介绍Observatory界面右侧列出的相关功能介绍Dart DevTools介绍F......

2019-09-29 14:54:22 5462 1

原创 Vue.js 判断平台是PC、Android 还是 IOS

let native;let p = navigator.platform;let u = navigator.userAgent;let is_android = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;let is_ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/...

2019-09-24 19:45:20 2934

原创 Flutter实战(八)---巧用SizedBox实现Margin效果

Android开发时,我们一般设置内外边距是使用目标控件自身的两个属性android:padding和android:layout_margin,如果需要指定某个方向的边距,例如左侧,内边距设置android:paddingLeft,外边距设置android:layout_marginLeft。Flutter开发,万物皆Widget,对于内边距,我们一般是在目标控件包裹一层父级控件Padding......

2019-09-10 18:50:19 2567

原创 Flutter实战(七)---Native交互

原理阐释Flutter和Native通信是通过Platform Channels来实现的,架构图如下:图里面连接他们的是MethodChannel,其实MethodChannel是Platform Channels中的一种,顾名思义,MethodChannel用起来应该和方法调用差不多。如果你需要把数据从Native平台发送给Flutter,可以使用EventChannel或者BasicMe......

2019-09-10 11:54:00 523

原创 UML视图介绍

基本介绍UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。UML图按系统架构应用场景分为用例视图、设计视图、进程视图、实现视图和拓扑视图;按照交互类型分为静态视图和动态视图,静态图包括用例图、类图、对象图、构件图,部署图,动态图包括状态图、活动图、协作图、序列图。UML与软件工程UML图是软......

2019-08-21 11:33:18 1649

原创 Go语言学习-定时器

timerAfterFunc(d Duration, f func()) *Timer:过指定时间后执行fNewTimer(d Duration) *Timer:可通过reset 重新开始After(d Duration) <-chan Time:指定时间后触发(若放在select中,则每次重新select都重新计时)tickerNewTicker(d Dura......

2019-07-16 19:46:18 935

原创 Go语言学习-日期与时间

Go 中时间处理依赖的数据类型:time.Time, time.Month, time.Weekday, time.Duration, time.Locationtime.Time 代表一个纳秒精度的时间点time.Month 代表一年中的某个月time.Weekday 代表一周的周几time.Duration 类型代表两个时间点之间经过的纳秒数,可表示的最长时间段约为29...

2019-07-16 19:28:30 727

原创 Go语言学习-for循环

for 是 Go 中唯一的循环结构, for 循环有三个基本使用方式带单个循环条件 for len(dataQueue) > 0 { data := <-dataQueue }经典的初始化/条件/后续形式 for 循环for i := 0; i <= 10; i++ { fmt.Println(i)}不带条件的 for 循环将一直执行,直到在循...

2019-07-13 17:08:37 393

原创 Go语言学习-interface

class和interface在高级语言中是很重要的概念。class是对模型的定义和封装,interface则是对行为的抽象和封装。Go语言虽然没有class,但是有struct和interface,以另一种方式实现同样的效果。go中interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interfa...

2019-07-13 17:01:34 247

原创 Go语言学习-HTTPS忽略证书校验

tr := &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, } client := &http.Client{Transport: tr}

2019-07-13 15:05:58 4164

原创 HTTPS协议介绍

在使用HTTPS协议时,需要注意证书的有效性、加密套件的安全性、禁用不安全协议等方面,以确保HTTPS协议的安全性得到充分发挥。数据完整性:HTTPS协议可以及时发现被第三方篡改的传输内容,就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收。默认端口:HTTPS使用不同于HTTP的默认端口,HTTPS的默认端口是443,而HTTP的默认端口是80。使用有效的SSL/TLS证书,证书应该由受信任的证书颁发机构签发,且未过期,与网站的域名匹配。

2019-07-13 14:57:29 705

原创 Go语言学习-错误和异常处理

错误和异常的区别错误和异常是不同的概念错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中。而异常指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况在人们的意料之外。可见,错误是业务过程的一部分,而异常不是。从Go语言机制上讲,错误和异常就是error和panic的区别。...

2019-07-11 11:17:49 1119

原创 Go语言学习-结构体与json

有时在Go的结构体定义时会看到这样的形式:type Result struct { ErrorCode string `json:"returnCode"` ErrorMsg string `json:"returnMessage"`}注意上述红色部分,这就称之为struct tag 。个人理解struct tag的作用类似于Java的注解的作用,在Go语言中可以通过反射机制在运行时......

2019-07-08 20:54:38 2500

原创 Flutter实战(六)---网络请求

这里建议使用第三方库dio,它是一个强大易用的dart http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载等。使用方法添加库依赖dependencies: dio: 2.1.x #latest version二次封装/* * 网络请求封装 * Created by ZhangJun on 2018-11-2......

2019-07-06 17:14:50 634

原创 Flutter实战(五)---页面跳转

在Flutter中,带数据的页面跳转使用Navigator,不带参数的页面跳转使用Router。Router将路由与页面对应起来 @override Widget build(BuildContext context) { return new MaterialApp( theme: new ThemeData( // This is the t......

2019-07-06 15:22:29 1120

原创 AI音箱工作原理浅析

智能音箱工作原理→1、识别人说的话(ASR ,Automatic Speech Recognition 自动语音识别技术)→2、对识别的内容提取信息并处理(NLP,Natural Language Processing自然语言处理 )→3、把处理结果发出声音给人(TTS,TextToSpeech 从文本到语音技术)下面对三步流程中的技术的ASR、NLP、TTS做下概念普及ASR:自动......

2019-05-19 17:25:16 13054 1

原创 Flutter实战(四)---LoadingDialog

在实际项目开发中,我们获取数据总会有一个等待过程,为了不让用户迷惑或者误操作,我们一般都会设计一个等待加载框 ,起到一个呈现数据前的过渡作用。效果:实现:自定义一个等待加载提示框,继承Dialog/* * 自定义等待加载提示框 * Created by ZhangJun on 2018-11-29 */import 'package:flutter/material.dar......

2019-04-28 11:30:17 7844 7

原创 Flutter实战(三)---SnackBar

Snackbar是Android 5.0新特性——Material Design中的一个控件,用来代替Toast,Snackbar与Toast的主要区别是:Snackbar可以滑动退出,也可以处理用户交互(点击)事件。Snackbar的特性Snackbar会在超时或者用户在屏幕其他地方触摸之后自动消失可以在屏幕上滑动关闭出现时不会阻碍用户在屏幕上的输入屏幕上同时最多只能显示一个Sn......

2019-04-17 09:09:39 2385

原创 Flutter实战(二)---多语言跨平台

前言去年12月份,Flutter1.0正式版发布,标志着Flutter已经达到可以投入商用项目的状态,我们可以看到Google的野心,不止步于移动端,已经向桌面端(Flutter Desktop Embedding)和Web端(Hummingbird)逐步拓展,大有一统天下之趋势。时隔三月,在2019 MWC 世界移动通信大会上,Flutter1.2发布,除了UI组件更新、动画优化和Dart语......

2019-04-10 09:10:00 1034

原创 Flutter实战(一)---闪屏(启动)页面的实现

很多app启动之后都会出现一个splash启动界面,显示广告信息或产品的LOGO、公司的LOGO或者开发者信息。如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。那么,我们使用Flutter开发应用该怎么实现闪屏页面呢?有两种方案可以实现:第一种,平台无关,在dart main函数里将启动页面作为第一个显示页面,设置一个定时器,定时显示多少秒后跳转到......

2019-02-26 12:42:38 6999

原创 如何向一个Fragment传递参数---setArguments方法的介绍

方法传递的数据在Fragment的生命周期内是持久的,即使在Fragment被暂停或停止时,这些数据也不会丢失。但是,如果Fragment被完全销毁(例如,由于内存不足),那么这些数据将会丢失。如果你需要在Fragment被销毁后保留数据,可以考虑使用其他持久化方法,如数据库或SharedPreferences。在Android开发中,Fragment之间的通信是一个常见的需求。其中一个常用的方法是通过。方法只能在Fragment第一次被创建时调用,即在。

2019-02-23 15:34:48 1654

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关注的人

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