自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cyc的专栏

一切皆有可能~

  • 博客(44)
  • 收藏
  • 关注

原创 Android | MVVM模式开源学习项目——玩Android客户端

项目地址https://github.com/chongyucaiyan/WanAndroid-Java项目简介一款基于玩Android开放API开发的玩Android客户端。整个项目采用MVVM + Retrofit + RxJava架构进行开发。项目截图 主要技术点基本遵循Material Design设计风格采用MVVM-DataBinding...

2019-03-28 15:32:40 1839 1

原创 Android | Android应用架构之MVVM模式

早期的Android应用开发中,Activity/Fragment承担了过多的职责,它们不仅负责了应用界面的显示,而且负责了业务逻辑的处理。这样一来,Activity/Fragment很容易就变得臃肿、复杂,造成应用难以测试、维护和扩展。随着Android应用开发技术的不断发展和成熟,Android应用架构的设计得到了越来越多开发人员的关注和重视。目前,Android的应用架构主要有MVC、MVP和MVVM模式,本文将介绍一下MVVM模式。

2018-05-08 23:53:26 34920 13

原创 Android | Android应用架构之MVP模式

早期的Android应用开发中,Activity/Fragment承担了过多的职责,它们不仅负责了应用界面的显示,而且负责了业务逻辑的处理。这样一来,Activity/Fragment很容易就变得臃肿、复杂,造成应用难以测试、维护和扩展。随着Android应用开发技术的不断发展和成熟,Android应用架构的设计得到了越来越多开发人员的关注和重视。目前,Android的应用架构主要有MVC、MVP和MVVM模式,本文将介绍一下MVP模式。

2018-01-20 23:57:30 6251

原创 Android | ConstraintLayout使用详解

前言ConstraintLayout是Google在Google I/O 2016大会上发布的一种新的布局容器(ViewGroup),它支持以灵活的方式来放置子控件和调整子控件的大小。ConstraintLayout功能强大,它能实现Android中传统的布局容器FrameLayout、LinearLayout和RelativeLayout所能实现的所有功能。我们可以使用ConstraintLayout来优化页面的布局层次。为什么推荐使用ConstraintLayout从Android Studio

2020-05-20 01:02:11 1246

原创 Algorithm | 排序算法总结

排序算法总结冒泡排序基本思想:比较,交换时间复杂度:O(N^2)空间复杂度:O(1)算法稳定性:稳定快速排序基本思想:挖坑填数,分治法时间复杂度:O(NlogN)空间复杂度:O(1)算法稳定性:不稳定直接插入排序基本思想:把无序区的第一个元素按顺序插入到有序区中时间复杂度:O(N^2)空间复杂度:O(1)算法稳定性:稳定希尔排序基本思想:增量...

2018-12-18 22:00:03 1865

原创 Algorithm | 排序算法之归并排序

相关知识基本思想基本思想:分治法,合并代码实现实现1:public static void mergeSort(int[] array, int first, int last) { if (first >= last) { return; } int middle = (first + last) / 2; mergeSort(a...

2018-12-18 21:59:28 1798

原创 Algorithm | 排序算法之堆排序

相关知识基本思想基本思想:堆化,堆的删除代码实现实现1:交换public static void heapSort(int[] array) { toHeap(array); for (int i = array.length - 1; i > 0; i--) { int tmp = array[i]; array[i] = arr...

2018-12-18 21:58:54 1811

原创 Algorithm | 排序算法之直接选择排序

相关知识基本思想基本思想:在无序区中找到最小(最大)的元素放在有序区的末尾代码实现public static void selectionSort(int[] array) { for (int i = 0; i < array.length; i++) { int min = i; for (int j = i + 1; j < arr...

2018-12-18 21:58:07 1461

原创 Algorithm | 排序算法之希尔排序

相关知识基本思想基本思想:增量分组,直接插入排序,缩小增量代码实现实现1:交换public static void shellSort(int[] array) { for (int gap = array.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < array.length; i++)...

2018-12-18 21:57:32 1702

原创 Algorithm | 排序算法之直接插入排序

相关知识基本思想基本思想:把无序区的第一个元素按顺序插入到有序区中代码实现实现1:交换public static void insertionSort(int[] array) { for (int i = 1; i < array.length; i++) { for (int j = i - 1; j >= 0 && array[j...

2018-12-18 21:57:01 1420

原创 Algorithm | 排序算法之快速排序

相关知识基本思想基本思想:挖坑填数,分治法代码实现public static void quickSort(int[] array, int first, int last) { if (first >= last) { return; } int i = first, j = last; int tmp = array[i]; ...

2018-12-18 21:56:20 1836 1

原创 Algorithm | 排序算法之冒泡排序

相关知识冒泡排序快速排序直接插入排序希尔排序直接选择排序堆排序归并排序基本思想基本思想:比较,交换代码实现实现1:public static void bubbleSort(int[] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j + 1 < a...

2018-12-18 21:55:07 1362

原创 Java | ArrayDeque源码分析

前言ArrayDeque类是Deque接口的一种实现,它表示一个双端队列。Deque接口除了提供操作双端队列的一系列方法之外,还提供了操作栈的方法,因此ArrayDeque也可以表示一个栈。LinkedList类也是Deque接口的一种实现,它是基于双向链表实现的。ArrayDeque是基于数组实现的,当数组容量不足时,会对数组进行扩容。ArrayDeque与LinkedList一样,都是非线程...

2018-11-26 00:25:24 2284

原创 Java | LinkedList源码分析

前言LinkedList类是List接口的一种实现,它表示一个列表。同时,LinkedList类也是Deque接口的一种实现,所以它也可以表示一个双端队列。Deque接口除了提供操作双端队列的一系列方法之外,还提供了操作栈的方法,因此LinkedList还可以表示一个栈。ArrayList类也是List接口的一种实现,它是基于数组实现的。LinkedList是基于双向链表实现的。LinkedLi...

2018-11-18 23:43:38 2583

原创 Java | ArrayList源码分析

前言ArrayList类是List接口的一种实现,它表示一个列表。ArrayList是基于数组实现的,当数组容量不足时,会对数组进行扩容。Vector类也是List接口的一种实现,它也是基于数组实现的。ArrayList与Vector互相兼容,但是ArrayList是非线程安全的。源码分析定义public class ArrayList<E> extends AbstractL...

2018-11-14 23:54:02 2741

原创 Java | StringBuffer源码分析

前言StringBuffer类表示一个可变的字符序列。StringBuffer的API与StringBuilder互相兼容,但是StringBuffer是线程安全的。在可能的情况下,建议优先使用StringBuilder,因为在大多数实现中它比StringBuffer更快。相关知识String源码分析源码分析定义public final class StringBuffer ...

2018-11-04 23:50:18 3881

原创 Java | StringBuilder源码分析

前言StringBuilder类表示一个可变的字符序列。StringBuilder的API与StringBuffer互相兼容,但是StringBuilder是非线程安全的。在可能的情况下,建议优先使用StringBuilder,因为在大多数实现中它比StringBuffer更快。相关知识String源码分析源码分析定义public final class StringBuilder...

2018-11-04 22:08:10 4769

原创 Java | String源码分析

前言String类表示字符串。Java程序中所有的字符串字面值,比如"abc",都是使用String类实现的。String对象是一个常量,它的值在创建之后不能被修改。源码分析String源码包含了大量的方法,比如:检查字符串中的单个字符的方法、比较字符串的方法、搜索字符串的方法、提取子字符串的方法、创建所有的字符都转成大写或者小写的字符串的方法等。定义public final class...

2018-10-30 23:48:47 2453

原创 Java | Object源码分析

前言Object类是Java类层次结构的根。也就是说,Object类是所有类的父类。所有的对象,包括数组,都实现了这个类的方法。源码分析定义public class Object { ...}Object类的定义就是一个普通的类的定义。getClass()方法public final native Class<?> getClass();getClass(...

2018-10-24 00:21:03 1676

原创 2019网易互联网校招内推(7.16-8.8)内附内推码

投递简历参与内推登录 网易校招官网 选择心仪岗位!在投递过程中,填写内推码并完善简历,即可完成内推投递!参与内推,可以免筛选,直接进笔试噢!祝顺利拿到心仪offer!内推码内推码:185GT41...

2018-07-26 13:40:40 2647 2

原创 Android | EventBus源码分析

EventBus是一种用于Android的发布/订阅事件总线。它有很多优点:简化应用组件间的通信;解耦事件的发送者和接收者;避免复杂和容易出错的依赖和生命周期的问题;很快,专门为高性能优化过等等。

2018-01-02 23:50:06 4959 2

原创 Android | EventBus使用详解

EventBus是一种用于Android的发布/订阅事件总线。它有很多优点:简化应用组件间的通信;解耦事件的发送者和接收者;避免复杂和容易出错的依赖和生命周期的问题;很快,专门为高性能优化过等等。

2017-12-30 00:13:30 51223 19

原创 Android | AsyncTask源码分析

当应用需要执行耗时的任务时,为了保持应用的平滑流畅和避免ANR,我们需要使用工作线程来执行耗时的任务。当耗时的任务执行完毕时,如果需要更新UI界面,那么我们需要使用Handler来通知UI线程更新界面。为了简化这些操作,方便开发人员编程,Android系统提供了一个AsyncTask类。使用AsyncTask,你可以很方便地执行后台操作,并在UI线程中更新界面,而无需直接操作Thread和Handler类。

2017-12-20 23:44:29 3262

原创 Java | Java线程池

Java语言支持多线程编程。每个线程的创建和销毁都需要一定的性能开销。因此,实际使用多线程时多采用线程池。使用线程池有一些优点:可以重用线程,减少线程创建和销毁带来的性能开销;可以控制程序的并发数,避免系统资源耗尽;可以对线程进行管理,比如定时和定期执行等。

2017-12-12 23:50:19 1921

原创 Java | Java多线程

Java语言支持多线程编程。使用多线程有一些优点:可以提高系统的资源利用率;可以提高应用的响应能力;对于复杂的应用,可以简化程序的设计。

2017-12-10 22:32:46 1899

原创 Android | Android性能优化工具之StrictMode

StrictMode(严格模式)是一个开发工具,它可以检测出一些影响应用性能的问题。比如,在主线程中进行磁盘读写操作、Activity内存泄漏等。我们可以使用StrictMode来优化应用的性能,提高应用的响应能力,减少应用的内存泄露,避免应用出现ANR和OOM。

2017-12-08 01:33:45 3330

原创 Android | Android性能优化之延迟加载视图

有时候,UI的布局可能包含了复杂但又不一定使用的视图。如果只在需要的时候加载这些视图,而不是一进入页面就加载,那么我们就可以加快页面的启动速度并且减少内存的使用。Android系统提供了一个叫做ViewStub的控件来帮助我们实现延迟加载视图。

2017-10-22 23:57:17 3916

原创 Android | Android性能优化之优化布局层次结构

Android系统允许我们在布局中嵌套布局。然而,嵌套的布局会增加UI布局阶段花费的时间,从而降低UI的性能。布局层次结构越浅,UI布局阶段花费的时间就越少,从而UI的性能就越好。因此,在满足需求的前提下,我们应该尽量地优化布局层次结构。

2017-10-22 00:06:20 2537

原创 Android | Android性能优化之减少过度绘制

过度绘制是指应用在单个帧中多次绘制相同的像素。通常过度绘制浪费了GPU时间去渲染哪些不影响用户所见的像素,从而降低了UI的性能。Android设备提供了一个开发者工具来帮助我们调试过度绘制。通过这个工具,我们可以直观地发现哪些地方出现了过度绘制,从而可以尽量减少过度绘制。

2017-10-18 01:05:29 2700

原创 Android | Android静态代码检查工具Lint

Android提供了一个叫做Lint的静态代码检查工具。Lint工具可以帮助你检查可能影响应用质量和性能的代码问题。该工具会报告检测到的每个问题并提供问题的描述信息和严重级别,以便你可以快速地确定需要优先进行哪些改进。在使用Android Studio时,配置的Lint工具和IDE检查会在你编写代码时自动运行。当然,你也可以手动运行Lint工具。

2017-10-12 23:54:03 4904

原创 Android | Android性能优化工具之Traceview

Traceview是一个用来查看应用执行日志的图形化工具。通过它,我们可以直观地查看应用代码是如何随时间执行的,以及每个方法的执行时间和调用堆栈等信息。Traceview工具可以帮助我们跟踪应用代码中的性能问题。

2017-10-10 01:09:14 2627

原创 Android | Android性能优化工具之Systrace

在开发应用时,你需要检查应用的交互是平滑流畅的。Systrace工具可以帮助你收集设备上运行的所有进程的时间信息,并生成一个详细的HTML报告。它显示了给定时间内CPU的使用情况以及每个进程和线程在做什么。它还自动分析了捕获的跟踪信息,并高亮显示它所观察到的性能问题,同时提供了如何修复问题的建议。Systrace工具特别适合用来分析UI的性能。

2017-10-04 23:56:34 3120

原创 Android | Android性能优化工具之HierarchyViewer

Hierarchy Viewer是一个内置在Android Device Monitor中的工具,它允许你查看Activity的布局层次结构以及每个View的属性和布局速度。Hierarchy Viewer可以帮助你发现布局层次结构导致的性能瓶颈,从而帮助你优化布局层次结构和减少过度绘制。

2017-10-02 23:59:14 3016

原创 Android | IntentService源码分析

在Android中,Service是运行在主线程之中的。如果要在Service中执行耗时的任务,那么我们需要手动创建子线程。并且,在任务完成的时候,我们需要手动停止Service。为了简化这些操作,Android提供了一个IntentService类。IntentService是Service的子类,它使用了一个HandlerThread线程来依次处理每个启动Service的请求,并在所有的请求都处理完毕之后自动停止

2017-09-24 23:56:38 3495

原创 Android | HandlerThread源码分析

在Android中,默认情况下,一个线程没有与它相关联的Looper。也就是说,默认情况下,我们无法创建与该线程相关联的Handler。HandlerThread是一个继承自Thread的线程类,它用于启动一个有Looper的线程。通过这个Looper,我们就可以创建与该线程相关联的Handler。通过Handler,我们就可以很方便地控制该线程执行我们的耗时任务。在Android系统中,很多地方都使用了

2017-09-20 02:04:15 3673

原创 Android | Android的异常捕获

一个应用不可避免的会有bug。当一个bug的类型是未捕获异常时,应用就会崩溃。如果应用还在开发阶段,那么情况好一些。因为开发人员可以根据Android Studio打印的崩溃日志来定位问题,并解决问题。如果应用已经上线了,那么开发人员是无法获取到具体的崩溃信息的,也就无法在应用的下一次更新中修复问题。此时,Android应用的异常捕获就显得必不可少了。通常,每个上线的应用都会集成自家的或者第三方的异常上报平台。

2017-09-14 23:58:22 3617 2

原创 Gradle | Gradle构建之自定义Gradle插件

Gradle是一个专注于构建自动化和支持多语言开发的构建工具。使用Gradle构建工具,我们可以方便又快速地实现自己的构建目标。Gradle所有有用的特性都是由插件提供的。一个Gradle插件打包了可重用的构建逻辑,可以在不同的项目和构建中使用。Gradle允许你实现自己的自定义插件,这样你就可以重用你的构建逻辑,并与其他人分享。

2017-09-10 23:56:36 2422

原创 Gradle | Gradle构建之Gradle构建基础

Gradle是一个专注于构建自动化和支持多语言开发的构建工具。如果你在任何平台上构建、测试、发布和部署软件,Gradle提供了一个灵活的模型,可以支持从编译和打包代码到发布web站点的整个开发周期。Gradle被设计成支持跨多种语言和平台的构建自动化,包括Java、Scala、Android、C/C++和Groovy,并与开发工具和持续集成服务紧密地集成,包括Eclipse、IntelliJ和Jenkins。使用

2017-09-04 00:20:48 1682

原创 Gradle | Gradle构建之Groovy语言基础

Gradle的构建脚本是采用Groovy语言编写的。Groovy是Java平台上设计的一种强大的、可选类型和动态的语言。Groovy可以无缝地集成任何Java程序,并立即让你的应用程序拥有强大的特性,包括脚本功能、DSL、运行时和编译时元编程和函数式编程。

2017-08-26 15:58:01 1920

原创 Android | Android应用进程的生命周期

在Android系统中,一个应用进程的生命不是由应用自己直接控制的,而是由系统决定的。系统根据应用运行的组件、对用户的重要程度和系统当前可用内存的大小共同决定一个应用进程的生命。了解不同的应用组件(特别是Activity、Service和BroadcastReceiver)如何影响应用进程的生命,对于一个Android开发人员来说极其重要。没有正确地使用这些组件可能会造成应用进程在执行重要工作时被系统杀死。

2017-08-12 23:58:32 2894

空空如也

空空如也

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

TA关注的人

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