Android
文章平均质量分 93
k_every
这个作者很懒,什么都没留下…
展开
-
Kotlin中使用BottomNavigationView实现底部导航
Aandroid Design Support Library中增加了BottonNavigationView控件,实现底部导航切换页面方便了许多,同时它也有不便之处: 1. 底部的条目数超过三个,点击每个条目是会有很大的偏移量 2. 无法添加小红点提示以前为了实现底部导航切换页面,我通常用以下两种方式 1. TabLayout+ViewPager+Fragment 方式实现 2...原创 2018-05-14 16:09:35 · 5850 阅读 · 0 评论 -
Android四大组件之Service
第一种方式:通过start方式开启服务使用service的步骤:定义一个类继承Service;manifest.xml文件中配置Service;使用context.startService(Intent)启动Service;不使用时,调用context.stopService(Intent)停止服务;使用start方式启动的生命周期:onCreate() -> onSt...原创 2018-12-03 17:17:33 · 336 阅读 · 0 评论 -
Android极光推送 jcenter 自动集成
极光推送提供了一种jcenter自动集成的方式,相对于之前的手动集成方式,这种方法真的是简单快捷,可以省去很多操作,让你分分钟搞定极光推送,再也不用为以前那种大规模复制粘贴而烦恼了。1.配置jcenter支持在Project 根目录的主 gradle 中配置了jcenter支持(新建project默认配置就支持)build.gradlebuildscript { repositor...原创 2019-01-01 17:55:26 · 556 阅读 · 1 评论 -
Android之内存泄露、内存溢出、内存抖动
内存JAVA 是在JVM所虚拟出的内存环境下运行的,内存分为三个区:堆、栈和方法区。栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放。优点:速度快。堆(heap):用于存放由new 创建的对象和数组。在堆中分配的内存,一方面由java虚拟机自动垃圾回收器来管理,另一方面还需要程序员提高修养,防止内存泄漏问题。方法区(method):又叫静态区,跟堆一样,被所...原创 2019-02-27 23:21:55 · 981 阅读 · 0 评论 -
Android进程间的通信
由于Android系统中应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),Android SDK提供了4种跨进程通讯的方式。这4种方式正好对应Android系统中4种应用程序组件:Activity、ContentProvider、Broadcast 和 Service。1. Activity 可以跨进程调用其它应用程序的Activity;2. ContentProvider ...原创 2019-02-25 22:28:49 · 169 阅读 · 0 评论 -
Android Handler机制
一、关于Handler 的问题1. 为什么在主线程可以直接使用Handler?2. Looper 对象是如何绑定MessageQueue的?3. MessageQueue里的消息从那里来?Handler 是如何往MessageQueue中插入消息?4. Message 是如何绑定Handler 的?5. Handler 如何绑定MessageQueue?6. 关于Handler,在任何...原创 2019-03-15 16:46:03 · 156 阅读 · 0 评论 -
Volley源码解析一
基本使用//创建请求队列 google推荐写一个单例类 获取唯一一个队列 public class VolleyApplication extends Application { private static RequestQueue requestQueue; @Override public void onCreate() { super.onCre...原创 2019-04-26 14:46:47 · 283 阅读 · 0 评论 -
Volley源码解析二
NetworkDispatcherVolley源码解析一说到如果Request加入网络请求队列的情况有三种Request不需要缓存缓存内容已经过期Ttl 不过期,但是softTtl 已经超出了当前的时间那么4个NetworkDispatcher线程中的其中一个线程就会从阻塞队列取出Request脱离阻塞,代码如下//NetworkDispatcher.javapublic voi...原创 2019-04-28 15:16:07 · 301 阅读 · 0 评论 -
OKHTTP源码解析
一、OKHTTP 使用1、GET 请求 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute();...原创 2019-06-21 15:51:30 · 687 阅读 · 0 评论 -
Android四大组件之ContentProvider
ContentProvider作为四大组件之一,主要作用是进程间进行数据交互和共享(跨进程通信)ContentProvider相当于中间者角色(搬运工),真正 存储和操作数据的数据源还是原来存储数据的方式(数据库、文件、xml或网络)数据源可以是数据库、文件、xml、网络等使用ContentProvider需要知道以下内容一、URI(统一资源标识符)(1)、唯一标识ContentPr...原创 2018-12-07 17:41:24 · 346 阅读 · 0 评论 -
Android四大组件之Activity
一、Activity 生命周期这里用Activity1、Activity2来举例说明生命周期的流程启动Activity1:系统调用onCreate(),然后调用onStart(),在调用onResume(),activity进入运行状态。Activity1被其它Activity覆盖其上 (DialogActivity) 或者锁屏:系统会调用onPause(),暂停当前Activity的运...原创 2018-12-02 00:08:02 · 289 阅读 · 0 评论 -
View事件分发
Android中,虽然View不属于四大组件,但它的作用可以堪比四大组件,不管是一个普通的视图,还是一个复杂的布局,都是依靠View来实现的。与事件分发有关的方法一个完整的手势包括4个操作事件作用ACTION_DOWN手指按下ACTION_MOVE手指滑动ACTION_UP手指抬起ACTION_CANCEL事件被拦截一次触摸屏幕的过程为DO...原创 2018-11-26 23:01:50 · 194 阅读 · 0 评论 -
Android 中 MVC 、MVP 、MVVM 模式
软件的架构方式很多,从MVC,到MVP,再到MVVM,在不断演化的过程中核心的思想就是模块内部的高聚合和模块之间的低耦合。从而提高程序的开发效率,并且更容易进行后续的测试以及定位问题。一、MVC模式(Model, View, Controller) 模型层(Model) 负责处理数据的加载或者存储,封装与应用程序的业务逻辑相关的数据以及对数据的处理。 视图层(View) 负责数据的...原创 2018-09-11 16:34:15 · 301 阅读 · 0 评论 -
Kotlin Android个人总结
Android项目中使用了一段时间的Kotlin,给我的体验还是不错的,上手比较容易,和Java完全兼容,相互调用也比较方便,代码量减少了一部分特此做一个小小的总结:万能的 :作用示例定义变量类型var hello:String = "Hello Kotlin"定义参数类型fun set原创 2018-11-04 20:49:18 · 561 阅读 · 0 评论 -
Android ConstraintLayout 布局
AndroidStudio 3.0 默认ConstraintLayout,可以减少布局层级并提高布局性能;能够灵活的定位和调整子View的大小,子View依靠约束关系来确定位置。一、基本属性属性作用layout_constraintLeft_toLeftOf左边左对齐layout_constraintLeft_toRightOf左边右对齐layout_con...原创 2018-11-05 21:45:16 · 266 阅读 · 0 评论 -
DataBinding使用(二):可观察的数据对象
DataBinding中可观察的对象的作用是当数据发生变化是通知其它对象,和观察者模式差不多。Databinding 提供了三种通知方式来通过JavaBean更新UI,分别是Observable对象,ObservableFilelds字段和Observable Cllections集合,这些数据对象绑定到UI,当数据对象的属性发生变化时,UI也自动更新。一、JavaBean 继承BaseObse...原创 2018-11-18 23:04:21 · 408 阅读 · 0 评论 -
DataBinding使用(三):DataBinding高级使用
一、动态变量有时候我们可能不知道Binding类的名称,比如RecyclerView.Adapter中item布局可能有很多,并不会对应特定的Binding类,但任然需要通过onBindViewHolder(VH, int )去绑定数据public void onBindViewHolder(BindingHolder holder, int position) { final T it...原创 2018-11-19 17:15:53 · 676 阅读 · 0 评论 -
DataBinding使用(一):布局和binding表达式
DataBinding通过数据绑定,可以直接在xml中绑定数据并实现一些处理逻辑,实时动态刷新数据。可以减少代码量,没有反射性能也很好。一、环境配置在Module级别的build.gradle上添加对DataBinding的支持android { .... dataBinding { enabled = true }}如果在library中使用...原创 2018-11-17 19:44:19 · 2476 阅读 · 0 评论 -
View测量、布局和绘制
View三大流程的发起点当Activity对象被创建完毕后,会将DecorView添加到Window中(Window是对窗口的抽象,DecorView是一个窗口的顶级容器View,其本质是一个FrameLayout,同时会创建ViewRootImpl(ViewRoot的实现类)对象,并将ViewRootImpl与DecorView建立关联。View的绘制流程从ViewRoot的performTr...原创 2018-11-29 17:28:55 · 316 阅读 · 0 评论 -
Android四大组件之BroadcastReceiver
普通广播(Normal broadcasts)是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传播的效率比较高;缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;//发送普通广播,所有订阅者都有机会获得并进行处理Context.sendBroadcast()有序广播(Oedered broadcasts)按照接收者的优先级别(声明在int...原创 2018-12-04 10:41:18 · 218 阅读 · 0 评论 -
Retrofit源码解析
Retrofit 使用1.定义请求接口public interface GitHubService { @GET("users") Call<User> getUser(@Query("id") int userId);}2.构建Retrofit 实例 Retrofit retrofit = new Retrofit.Builder().ba...原创 2019-07-17 16:37:54 · 286 阅读 · 0 评论