Android
文章平均质量分 81
海晨忆
这个作者很懒,什么都没留下…
展开
-
Android存储之SharedPreferences源码解析
个人博客:haichenyi.com。感谢关注1. 目录1–目录2–简介3–getSharedPreferences会不会阻塞线程,为什么?4–get操作,为什么有时候会卡顿?5–commit和apply的区别6–优化sp操作2.简介 从工作开始,Android存储数据最常见的应该就是SharePreference,但是,你真的用懂了吗?源码你看过吗?Google对sp的定位你知道吗?是不是所有数据都应该用sp来存储呢? 为什么现在面试关于sp非常常见呢?不就是一个get,p原创 2022-01-27 18:23:22 · 2714 阅读 · 0 评论 -
Android——MVVM之DataBinding(一)
DataBinding的view绑定流程图原创 2021-12-17 23:25:01 · 2730 阅读 · 1 评论 -
Android——MVVM之ViewModel
个人博客:haichenyi.com。感谢关注1. 目录1–目录2–前言(MVVM演变路程)3–目的4–ViewModel为什么不会内存泄漏?5–Activity屏幕旋,为什么ViewModel没有被重新创建还是使用的是之前的?6–Activity与Fragment之间数据如何共享的7–GlobeScope,viewModelScope,lifecycleScope的相关问题前言(MVVM演变路程) 以前有说过MVC,MVP,MVVM之间的区别,这里就不再说了。 MVC架构原创 2021-11-28 21:58:46 · 1362 阅读 · 0 评论 -
Android——深入理解handler机制
handler原理解析,非常详细原创 2021-11-21 11:31:34 · 2722 阅读 · 0 评论 -
MVC、MVP、MVVM比较
个人博客:haichenyi.com。感谢关注MVC 我们刚接触android写代码的时候基本上都是MVC架构。什么是MVC架构呢? MVC:Model View Controller的简称。流程图如下: 当用户发出事件的时候,首先通过V层,通知C层,然后C层通知Model层数据发生了变化,更新数据,M层直接显示数据到V层。 通俗的讲,xml可以理解层View层,你...原创 2018-02-22 17:05:15 · 303 阅读 · 0 评论 -
Android事件分发机制原理
个人博客:haichenyi.com。感谢关注推荐:非著名程序员的安卓自定义View教程目录,我的自定义view就是看他的这个系列学会的 首先,我们需要确认的是android的事件传递机制是责任链模式,如果自己能处理就拦截下来自己处理,如果自己处理不了或者不确定就传递给下一个对象事件的拦截、分发、消费 我们要知道三个方法,控制事件反而拦截,分发与消费。如下表: 类型...原创 2018-02-12 13:45:51 · 382 阅读 · 0 评论 -
Android拍照功能——TakePhoto
个人博客:haichenyi.com。感谢关注之前在写项目框架Andoroid 6.0,动态获取权限的时候就提到过TakePhoto开源框架简介一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库依赖implementation 'com.jph.takephoto:takephoto_library:4.0.3'...原创 2018-03-05 13:59:55 · 1647 阅读 · 0 评论 -
简单的蓝牙通信
个人博客:haichenyi.com。感谢关注 之前公司做智能家居类型,其中做了一个智能衣柜项目,与衣柜通信就是用的蓝牙通信。一些操作一些简单的开关指令,蓝牙通信与socket是类似的。步骤清单文件注册权限启动蓝牙服务(记得在清单文件中静态注册服务)注册蓝牙广播(在蓝牙服务中动态注册蓝牙广播)搜索,绑定,完成退出app,停止服务,并在蓝牙服务的onDestory方法中取...原创 2018-03-05 15:41:41 · 359 阅读 · 0 评论 -
Android WIFI功能——WifiManager
个人博客:haichenyi.com。感谢关注 之前做了关于Android wifi的相关功能,这里做一个记录第一步:获取WifiManagerWifiManager wifiMgr = (WifiManager)Context.getSystemService(Context.WIFI_SERVICE);第二步:获取周围热点信息和已连接wifi信息List&...原创 2018-03-05 16:31:43 · 11884 阅读 · 1 评论 -
Netty框架的简单使用,实现socket通讯
个人博客:haichenyi.com。感谢关注 题外话,很多人都把JDK1.4提供的NIO称之为异步非阻塞I/O;其实,并不然,从严格意义上面讲,它只能称为非阻塞I/O。在JDK1.7提供的NIO 2.0,新增了异步的套接字通道Channel,它才是真正的异步非阻塞I/O。下表是不同I/O模型的对比:表1-1 几种I/O模型和同能对比 同步阻塞I/O(BIO) 伪异步I/...原创 2018-02-12 11:15:43 · 17640 阅读 · 1 评论 -
揭露动画—ViewAnimationUtils.createCircularReveal
ViewAnimationUtils是Android5.0出来的API。其作用就是可以使控件能够呈现水波一样展开。先上一张效果图: PS:图是网上找的,不会做gif图。 具体的方法如下:public static Animator createCircularReveal(View view, int centerX, int centerY, flo原创 2017-08-06 15:54:28 · 2476 阅读 · 0 评论 -
水波纹特效—Ripple
说到水波纹特效,就要讲Ripple。自从android5.0开始以后,google就推出了一套UI设计语言materialdesign,俗称:材料设计。其中一个最直观的效果就是涟漪效果(水波纹效果),就是可以点击的控件会有一个波浪的效果。这个效果就是RippleDirawable。今天就来研究下这个RippleDrawable 最大的优点就是方便,简单,只用写一个xml,设置成你需要特效控件原创 2017-08-05 15:01:50 · 1209 阅读 · 0 评论 -
eventBus的入门
很早之前就有童鞋告诉我这个开源框架了,一直想看,因为各种原因都没有去看,现在终于看了。好开心,写个总结来瞅瞅。首先就是依赖了,只有关联了你才能用。代码如下compile 'de.greenrobot:eventbus:3.0.0-beta1' 就这一行代码,在build.gradle文件的dependencies类下面,这是手动添加,你也可以在线自动添加依赖,如下 file—proj原创 2017-03-19 20:19:19 · 257 阅读 · 0 评论 -
腾讯TBS X5 WebView的简单使用
很多APP都嵌套了webview,腾讯的webview的简单使用。腾讯webview的sdk下载地址 用法: 1、布局文件:<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background=原创 2017-08-03 15:22:02 · 4167 阅读 · 0 评论 -
Android版本更新功能
APP都涉及到版本更新,这里我说一下思路,以及提供伪代码(从我项目里面直接拷贝出来的,你们直接用,是用不了的)。 思路就是:拿后台的接口,返回给你一个字段,是服务器上面的apk的版本号(每次把新版本apk上传到公司服务器,都要把对应的版本号字段修改,写死的),跟你本地的apk版本号比较,大于就提示用户更新下载。这里就涉及到下载功能,现在基本上都是okgo,反正我用的okgo。涉及到下原创 2017-08-03 14:20:02 · 743 阅读 · 0 评论 -
Android自定义对话框
自定义对话框,你只用传你自己的布局即可。 单例模式创建对象,记得在destory方法里面置空private static CustomProgressDialog instance; public static CustomProgressDialog getInstance(Context context) { if (null == instance) {原创 2017-08-03 14:04:30 · 202 阅读 · 0 评论 -
Java反射机制
个人博客:haichenyi.com。感谢关注简介 在运行过程中,对任意一个类,都能知道这个类的所有属性和方法。对于任一个对象,都能调用他的任意一个方法和属性。这种动态获取信息以及动态调用对象的方法称为java语言的反射机制用法我这里就列出我常用的两个方法私有类和变量方法Methods 方法 用途 getDeclaredMethods()...原创 2018-03-06 15:39:18 · 123 阅读 · 0 评论 -
Android下拉刷新,上拉加载——Ultra-Pull-To-Refresh-With-Load-More(一)
个人博客:haichenyi.com。感谢关注简介Android里面刷新和分页加载是常见的,刷新有Google的SwipeRefreshLayout,但是UI不同意,非要跟IOS一样,那就没办法了。开源框架链接:Ultra-Pull-To-Refresh-With-Load-More。这个开源框架是基于Ultra-Pull-To-Refresh拓展了一个上拉加载功能。作者:廖祜...原创 2018-03-23 13:37:39 · 1304 阅读 · 0 评论 -
Android自定义刷新布局——Ultra-Pull-To-Refresh-With-Load-More(二)
个人博客:haichenyi.com。感谢关注回顾上一篇,我们讲到了Ultra-Pull-To-Refresh的基本用法。分成四步:xml里面定义控件PtrFrameLayout设置相关属性添加Header,Footer,并监听监听刷新过程思路 目的: 做一个我们自己的自定义刷新的动画(我们先不管动画是什么,不同的需求,动画都不一样) 我们前面讲到的主...原创 2018-03-23 17:23:17 · 818 阅读 · 0 评论 -
一场由dagger2引发的一些思考
个人博客:haichenyi.com。感谢关注 用了好几年的dagger2,从dagger2.android。就只有当时刚开始用dagger的时候深入的了解过,后来就再也没有深入的时候研究过。这几天又研究了一下,做个总结。 就拿之前写的kotlin的框架来说,它用的是dagger2.android。从dagger2.android。最明显的就是,需要我们自己写的东西越来越少了,框架帮我们做...原创 2019-07-31 17:39:06 · 323 阅读 · 0 评论 -
Android开发中的小技巧(持续更新...)
个人博客:haichenyi.com。感谢关注1. 不需要读写权限就可以操作的目录 一谈起要做文件的读写操作,应在脑海中的就是先申请读写权限,没有读写权限就不让对应的操作。那为什么SP也是把数据存本地,缺不需要读写权限呢? 只要是存储在你的APP目录下面,就不需要读写权限。而,手机上面APP目录有两种:一种是手机内部,一种是SD卡目录。怎么获取呢?//手机内部:APP目录下默认有两个文...原创 2019-07-25 17:55:44 · 336 阅读 · 0 评论 -
kotlin项目框架
个人博客:haichenyi.com。感谢关注MVP+dagger2.android+LiveData+RxJava2+Retrofit2+OkHttpgithub项目链接原创 2019-07-23 17:31:37 · 246 阅读 · 0 评论 -
图片滤镜——GPUImage
个人博客:haichenyi.com。感谢关注 GPUImage图片滤镜处理的第三方开源库,对照IOS版的GPUImage写的,部分功能尚未完善,目前也有很多种滤镜,常用的滤镜基本上都有,请先浏览一遍github上面的用法。依赖的库repositories { jcenter()}dependencies {//这个版本号2.x.x,具体的数字看,github官方说明//...原创 2019-05-23 18:15:37 · 518 阅读 · 0 评论 -
Android——Tensorflow-Lite简单使用
个人博客:haichenyi.com。感谢关注 项目里面用到了tflite,用于做简单的图片处理,不是判断图片是什么类型,就是传进去图片,生成新图片,类似于前面一篇讲的GPUImage的滤镜功能,但是比滤镜功能更加强大。 我这里要做的就是集成,拿人家训练好的模型直接来用,我不用去训练模型。第一步 依赖//依赖库implementation 'org.tensorflow:tensor...原创 2019-05-24 11:43:41 · 2591 阅读 · 1 评论 -
Android—本地library提交到JCenter
个人博客:haichenyi.com。感谢关注 前面两篇说了怎么生成jar包,aar包及其用法。这篇讲讲android studio的在线依赖——JCenter仓库。早期AS默认的依赖是google和maven仓库,也就是,我们的项目目录下面的build.gradle文件下的这个位置:allprojects { repositories { google()...原创 2018-05-21 12:45:51 · 380 阅读 · 0 评论 -
Android——MQTT推送
个人博客:haichenyi.com。感谢关注整体介绍 最近公司用到的推送MQTT。不想过多的介绍背景什么的,我就直接讲怎么实现这个功能。 他这个原理长连接,这个不用多讲,用法类似于EventBus,需要先订阅,然后通过topic再发送消息。topic是什么呢?我先来讲讲整体流程:先连接服务器,要先建立长连接然后需要订阅topic,连接之后才能订阅topic最后就是通...原创 2018-05-11 16:21:56 · 579 阅读 · 2 评论 -
Android —生成Jar包,aar(二)
个人博客:haichenyi.com。感谢关注 前一篇生成jar,aar的思路是:新建项目——新建module——配置jar信息——Terminal控制台生成jar 这一篇说个更简单的方式,Android Studio自带的生成jar,aar,双击即可步骤 一、新建一个项目,打开app——build.gradle,修改如下信息://把最上面的applicati...原创 2018-05-17 14:49:57 · 257 阅读 · 0 评论 -
Android —生成Jar包,aar(一)
个人博客:haichenyi.com。感谢关注 最近公司说要做一个信息采集和签到功能,要把这两个功能提取成一个jar包,给其他app调用,之前没做过,感觉jar包这个功能还是挺好用的,整理一下,做个记录。生成Jar,aar 首先,跟正常一样,新建一个项目,什么都不用做,新建一个项目就可以了,然后再项目里面File——new——new module——android Librar...原创 2018-05-17 13:50:04 · 304 阅读 · 0 评论 -
Android—React Native编程
个人博客:haichenyi.com。感谢关注新公司,新的开始,新的技术 新公司的项目,用到的RN编程,之前完全没有碰到过,遇到新技术,之前完全没有碰到过怎么办?google、百度咯。通过不屑的努力,找到了恋猫月亮 的三篇关于RN的文章。我感觉还是很不错的。从Android到React Native开发(一、入门)从Android到React Native开发(二、通信与模块...原创 2018-05-10 13:32:34 · 692 阅读 · 0 评论 -
Android——PorterDuffXfermode
个人博客:haichenyi.com。感谢关注简介 PorterDuffXfermode是什么鬼?个人理解,简单的来讲就是做两个Bitmap操作的,什么操作呢?有裁剪,合并等等,有16种图形混合模式。先举一个简单的例子,我们在慢慢讲:/** * Author: 海晨忆 * Date: 2018/3/28 * Desc: */public class MyCustom...原创 2018-03-28 20:21:12 · 397 阅读 · 0 评论 -
Android自定义View——贝赛尔曲线
个人博客:haichenyi.com。感谢关注 本文针对有一定自定义View的童鞋,最好对贝赛尔曲线有辣么一丢丢了解,不了解也没关系。花5分钟看一下 GcsSloop的 安卓自定义View进阶-Path之贝塞尔曲线。本文的最终效果图: 思路首先他是一个只有上半部分的正弦形状的水波纹,很规则。其次,他这个正弦图左右在移动。然后,就是它这个自定义View,上下也在移动,是...原创 2018-03-27 20:17:27 · 319 阅读 · 0 评论 -
工具类—相册获取照片
经常用到手机相册功能的童鞋都知道,小米手机获取相册图片跟其他手机都不一样,这里有一个工具类 也是在网上找的,亲测有效,可以使用。记得,获取相册之前得先动态获取权限,前面一篇说了如何 动态获取权限,不知道的童鞋可以去瞅瞅。获取手机相片的工具类如下,拷过去用即可public class MiPictureHelper { @SuppressLint("NewApi")原创 2017-08-03 13:32:40 · 324 阅读 · 0 评论 -
动态一次获取多种android6.0以上的权限
android6.0及以上版本区分了:普通权限和危险权限。普通权限可以直接在清单文件里面申请, 危险权限不仅要在清单文件里面申请,还要在代码里面动态获取。如果你仅仅动态获取了, 没有在清单文件里面申明,在你返回的回调方法里面会被拒绝给权限。 我这里的思路就是,先判断版本号是否大于android6.0, 然后判断你的操作需要的权限哪些是没有给的,没有给的就去动态获取,给原创 2017-08-03 13:13:45 · 997 阅读 · 0 评论 -
基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架
写这个不是为了什么,仅仅是为了督促自己学习,进步。效果图: 就是这样一个简单的不能再简单的框架,Actionbar用的是SystemBarTint(半透明化状态栏),主页底部导航栏用的是BottomNavigationBar。文章结尾有项目链接,需要一个积分,各位大哥大姐,赏小的一点积分用用呗。 我带大家走一遍我的这个简单的框架。 首先有一个基类BaseActivit原创 2017-03-18 17:39:50 · 418 阅读 · 0 评论 -
Android面试必备
Handler分发机制是什么?Handler分发机制就是handler,looper,message之间的关系。总的来说就是handler是looper和message的中间桥梁。Handler创建消息。Android里面每一个消息都要交给指定的handler处理,这里引入了Message Queue(消息队列)。创建消息的时候,会先访问MQ,看它里面有没有这个消息,如果有就会取出来,没有就会创建原创 2017-02-13 13:03:21 · 300 阅读 · 0 评论 -
RecyclerView的简单使用,实现下拉刷新、上拉加载
一直用的ListView、最近才听别人说了一种控件RecyclerView,说是listView和gridview的升级版,就去研究了一下。把最简单的下拉刷新、上拉加载做出来了。本来研究这个东西,是想把侧滑删除,类似于QQ的效果做出来的,结果能力有限。首先,recyclerview是v7包里面的,要是想用这个控件就先去晚上找jar包吧。我是直接用AS的在线导包。这里我用到了两个包。recycler原创 2016-04-18 17:32:57 · 479 阅读 · 0 评论 -
自定义抽屉—QQ特效
这个我是根据黑马视频做的,用来总结一下。抽屉用到的很多,下面写的比较麻烦,需要读者有耐心的看完。写的不对的地方请提出来。抽屉我继承的是FrameLayout,因为他有测量的过程,省略了我手动测量。它最重要的就是实现ViewDragHelper的回调方法。文章最后有下载地址。首先,我们在自定义的View的构造方法里面初始化ViewDragHelper,他是单例模式创建的,并不是new出来的。定义成原创 2016-04-15 11:11:52 · 910 阅读 · 0 评论 -
android自定义加载数据动画dialog和简单的timer计时器
首先是自定义dialog类,项目中有,这里给出几个主要的方法。public void onWindowFocusChanged(boolean hasFocus) { ImageView imageView = (ImageView) findViewById(R.id.spinnerImageView); // 获取ImageView上的动画背景 A原创 2016-03-28 15:52:14 · 1857 阅读 · 0 评论 -
从手机相册,相机选取照片
启动android手机相机,相册,就是两个Intent。protected void photoGraph() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileName = System.currentTimeMillis() + ""; //输出数据,必须要有,不然原创 2016-03-28 12:20:49 · 564 阅读 · 0 评论 -
Fragment延迟加载(实时更新)
公司项目里面用到fragment。fragment自带预加载,有的项目需要预加载,有的项目不要预加载,信息要实时更新。用户看到的fragment里面的信息是最新信息,即每次都要重新加载数据。 ViewPager+fragment实现延迟加载即重写父类的setUserVisibleHint()方法,很简单,跟重写oncreate方法一样,系统自动调用。public class Fragment3 e原创 2016-03-31 17:09:53 · 3405 阅读 · 0 评论