Android
C v lie
追求美好,阳光
展开
-
Jetpack之DataBinding使用方式
一.基础入门DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM 相对于 MVP,其实就是将 Presenter 层替换成了 ViewModel 层。DataBinding 能够省去我们一直以来的 findViewById() 步骤,大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常启用原创 2020-08-10 14:42:28 · 694 阅读 · 1 评论 -
Android屏幕适配方案
目前比较流行的屏幕适配方案是今日头条适配方案和smallest width限定符适配方案首先来说一下今日头条的屏幕适配方案:简介:我们写UI界面的时候,都是使用dp作为单位,UI给出的设计图也是以dp为单位,比如UI给的图是宽x高为360x640dp的。那么我们为了达到在所有手机上都能不变形的展示UI图,那么我们所有的手机都要是宽x高 = 360 x 640dp,很显然,实际情况不是这样的,因...原创 2020-04-17 20:52:27 · 413 阅读 · 0 评论 -
Android事件分发机制
Android 事件分发涉及到三个方法 public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发事件的,返回结果受当前View的onTouchEvent(MotionEvent ev)和下级View的dispatchTouchEvent(MotionEvent ev)影响 public boolean onIntercept...原创 2019-02-24 22:41:09 · 130 阅读 · 0 评论 -
如何把本地文件上传到码云(同github)
1.在码云上创建一个仓库2. 复制一下仓库的地址3.进入到要上传的本地文件的目录下4.在当前目录下打开git命令窗(前提必须安装了git工具)5.执行git命令 git init git add . git commit -m "inital" git remote add origin https://gitee.com/ABC_MA_NONG/Utils.git (这...原创 2019-02-20 19:51:11 · 2718 阅读 · 1 评论 -
容易导致内存泄露的场景
资源性对象未关闭资源性对象(比如Cursor、File文件等)往往都用了一些缓冲,在不使用的时候,应该及时关闭它们,以便它们的缓存数据能够及时回收。它们的缓存不仅仅在JAVA虚拟机内,还存在JAVA虚拟机外,如果仅仅把它们的引用对象置为null,而不关闭它们,往往会造成内存泄露。因为有些资源性对象,比如SQLite Cursor,如果我们没有关闭它,而仅仅把它置为null,系统在回收它时也会...原创 2019-02-26 14:13:11 · 366 阅读 · 0 评论 -
《Android开发艺术与探索》读书笔记之Binder
1.Binder是Android中夸进程通信的一种方式。从Android FrameWork 角度来说,Binder是ServiceManager连接各种Manager(ActivityManager和WindowManager等)和相应ManagerService的桥梁。从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回包含了一个...原创 2019-03-02 20:38:46 · 176 阅读 · 0 评论 -
Retrofit源码解密之----------动态代理
写在前面的话Retrofit是开源的网络请求框架,是目前最火的框架之一,也是求职面试之中被提问的比较多的知识点。最近抽了点时间阅读了一下Retrofit源代码,给大家分享一下 public <T> T create(final Class<T> service) { //判断service是不是个接口 Utils.validateServiceInter...原创 2019-03-08 22:21:25 · 193 阅读 · 0 评论 -
Fragment生命周期,以及hide() show() replace() add() remove() addToBackStack(null)等对Fragment生命周期的影响
Fragment的生命周期Fragment的生命周期如图所示,注意点:在onAttach()方法回调的时候,说明Fragment已经附着到了Activity上,在onAttach方法中获取它所在的Activity对象并且保存为全局属性,以便后面的方法中使用,切记不要使用getActivity来获取它所在的activity对象,因为这个方法有的时候会返回为空,因为在某些情况下,Activity...原创 2019-03-10 20:05:35 · 1469 阅读 · 0 评论 -
Android 自定义轮播图(Banner)
先上图看效果:知识要点:轮播图是怎么做到无限循环的呢让ViewPagerAdapter里面的getCount返回MAX_VALUE,instantiateItem方法中,获取图片的时候,让position % drawableList.size(),来得到真实值 @Override public int getCount() { return Integer.MAX_VA...原创 2019-03-11 17:04:45 · 935 阅读 · 0 评论 -
Activity的启动过程(笔记)
在启动Activity的时候,我们会调用Context的startActivity方法,这个方法会调用到Activity的startActivityForResult方法。startActivityForResult方法又会调用到Instrumentation类的execStartActivity方法,这个方法又会调用到ActivityManagerNative对象的startActivity这个...原创 2019-03-16 16:52:27 · 309 阅读 · 0 评论 -
RecyclerView实现聊天界面
先看一下效果图RecyclerView简介RecyclerView是从Android5.0开始,谷歌公司推出的一个用于大量数据展示的新控件。RecyclerView可以替代传统的ListView,它更加强大和灵活,RecyclerView的官方定义如下 A flexible view for providing a limited window into a large data ...原创 2019-03-27 21:37:53 · 3005 阅读 · 0 评论 -
Paint和Canvas学习
先上图看效果圆角矩形的实现方法在自定义View初始化的地方创建画笔,并设置相关属性 //创建画笔,设置flag //ANTI_ALIAS_FLAG 抗锯齿 //DITHER_FLAG 在绘制的时候启用抖动标志 paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); //给画笔设置颜色 paint.set...原创 2019-04-20 20:37:38 · 217 阅读 · 0 评论 -
剑指offer算法题----定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 import java.util.Stack; public class Solution { private Stack<Integer> stack = new Stack(); private Stack<Integer> minStac...原创 2019-06-20 21:12:39 · 170 阅读 · 0 评论 -
什么是过度绘制,如何防止过度绘制
过度绘制是指,屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结 构里,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次,同时 会浪费CPU和GPU资源。在Android手机设置的开发者选项里面,打开调试GPU过度绘制的开关,就可以看到过度绘制的信息原色 没有过度绘制蓝色 过度绘制一次绿色 过度...原创 2019-02-18 20:52:08 · 2990 阅读 · 0 评论 -
Android MVP 模式框架
Android 开发MVP模式已经成为了主流开发框架,它相对于MVC模式确实有很多好处,比如:1.减少了Activity或者Fragment里面的代码数量,使Activity代码或者Fragment代码看起来不再那么臃肿,逻辑复杂。2.使逻辑处理和UI操作进行了解耦,有利于进行维护,迭代和重构3.使代码结构更加清晰,更加容易阅读下面就看一下MVP模式是怎么实现的 (UI层以Fragmen...原创 2019-02-23 12:00:42 · 394 阅读 · 0 评论 -
Android抽屉集成示例
集成步骤:1.新建一个Android studio工程:2.添加依赖compile 'com.ikimuhendis:ldrawer:0.1'3.编写activity_main.xml文件<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:android="...原创 2019-02-18 09:53:40 · 162 阅读 · 0 评论 -
JAVA知识总结(一)
1.乐观锁CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其他线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。实现原理:如果内存位置V的值与操作线程预期原值A的值相匹配,那么处理器会自动将该位置更新为新值B,否则处理器将不做任何操作。CAS有效的说明了“我认为该位置应该包含值A,如果包含该值,则将B放到这个位置上...原创 2019-01-29 10:06:54 · 172 阅读 · 0 评论 -
Android知识总结
1.打开一个App, 从主页跳转到其深层子页面,按HOME键回到桌面,再次打开,怎么才能使再次打开看到的是主页面?(注:这个过程app并没有被回收销毁)答:这个是通过配置主页Activity在Manifest里面的标签属性即可实现 <activity android:name=".MainActivity" android:clearTaskOnLaunch="true">...原创 2019-01-29 10:11:31 · 206 阅读 · 0 评论 -
git 仓库迁移
如果你的项目在一个地址的仓库上托管,后面想迁移到另一个地址的仓库上去,并且迁移的要求如下:1. git 提交历史必须完全保留2. git的各个分支和tag必须完全保留那么可以通过下面操作完成迁移:在新的地址上新建一个仓库,新建的仓库名字和原仓库名字保持一致就行#clone下来旧的仓库mkdir testgit clone http://..../..../..../test_temp...原创 2019-02-15 10:27:28 · 159 阅读 · 0 评论 -
Android apk打包流程
1.任何一个apk的运行都需要一个签名, 测试和开发阶段,开发工具会自动生成一个debug key来为应用签名;当应用要发布的时候,需要一个release key来为应用签名。2.为什么要给Android应用程序签名?这样做的根本原因是Android系统需要一个机制,保证以下几点:1). 拿到一个应用的安装包,能够知道作者是谁2). 当应用更新时,能够检测是不是作者本人提交的3). 应用...原创 2019-01-30 14:08:17 · 10193 阅读 · 0 评论 -
Android优化方案
1.启动时间优化Android 启动耗时主要发生在Application的onCreate()方法和主Activity的onCreate()方法中,主线程如果不能尽快的执行渲染UI的操作,就会给人一种启动慢的感觉。产生这种现象的原因主要是启动时,Application的onCreate()方法中和主Activity的onCreate()方法中有一些操作占用了主线程的资源,导致主线程花去了时间去执...原创 2019-02-16 22:06:57 · 150 阅读 · 0 评论