7 孙强 Jimmy

知乎 - Android 开发工程师

我要认证

求点赞 + 关注 + 收藏三连~ 欢迎加我微信 jimmysundev 一起交流学习! 加好友时请注明申请理由,例如「姓名/昵称 + Android 交流」,示例:张三 Android 交流。

等级
TA的排名 2w+

自定义 Lint 检查实践指南(未完待续)

1. 背景之前开发过程中遇到过一些坑,并产生了大量的线上崩溃,遇到过的一些问题如下:有些颜色值是通过后端下发的,但是在使用 Color.parseColor() 方法时,如果后端返回的不是标准的颜色格式,就会 crash。在 AndroidManifest.xml 文件中对一个 Activity 同时设置方向和透明主题时,在 Android 8.0 手机上会 crash。但是这些坑并不是每位开发者都会知道,所以即使一个人遇到过,以后可能还会有人犯同类的错误

2020-10-24 11:02:55

Kotlin 真香系列:扩展函数和属性

本文将介绍 Kotlin 中的扩展函数和扩展属性,并用这两个特性来逐步优化代码的写法,希望大家学习这种特性并在实践当中做更多的扩展。

2020-05-28 09:43:25

给 Android 开发者的 Dart 语言基础

本文基于官方的文档,整理出 Dart 语言中与 Java 和 Kotlin 语言类似和特有的部分,因此本文的读者需要具备一定的 Java 及 Kotlin 语言基础,相信大家读完本文就可以看懂大部分的 Flutter 代码了。

2020-05-25 20:26:47

Android 开发:如何优雅引入 Java 8 Stream API

Java 8 的更新给我们带来了很多新的特性,例如 Stream API 等等,但是在 Android 开发中使用 Java 8 的这些 API 时,通常 Android Studio 会提示如下错误:Call requires API level 24(current min is xx)意思是说在 Android API 24 版本(Android 7.0)以上时才能使用这些方法,但是通...

2019-11-01 20:24:39

Java 8:一文掌握 Lambda 表达式

本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总结。

2019-10-23 20:20:30

欢迎加入强哥的 Android 开发交流群

最近建了一个 Android 开发交流群,但不限于交流移动端、前端和后端等相关技术。本群的宗旨:让所有学习的群友都有进步的机会。1. 经验交流在我们学习时遇到困境,或者开发过程中遇到难题,都可以将你的问题抛出来,也许别人也会遇到过,让有经验的人来帮你解答。2. 文章分享我会每天分享一篇优质的文章,同时也会写上一段分享的理由,希望你看到好的文章也分享进来,大家一起学习进步。3. 职位内推...

2019-09-28 18:05:08

从0到1优雅实现沉浸式状态栏

本文将会教给大家如何从0到1优雅地实现沉浸式状态栏的效果,包括设置状态栏的颜色、状态栏透明和状态栏的文字颜色,并可以适配启动页和刘海屏等等。目录1. 概述2. 实现方案2.1 前期工作2.1.1 修改应用主题2.1.2 获取状态栏高度2.2 Android 5.0+2.2.1 设置状态栏颜色2.2.2 设置状态栏文字颜色2.2.3 设置状态栏透明2....

2019-08-25 17:58:34

如何精确设置RecyclerView自动滑动时间(速度)

有时我们会碰到一个让RecyclerView在固定时间滑动到指定位置的需求,网上的方法都是重写LinearSmoothScroller类的calculateTimeForScrolling()方法,虽然可以修改时长,但还是不能精确到具体的时间。本文将会教大家如何去精确设置RecyclerView自动滑动的时间。之前看到这篇文章:android之ViewPager修改滑动速度,发现是可以通过...

2019-08-22 21:37:27

JVM:类加载的五个过程:加载、验证、准备、解析、初始化

类的整个生命周期包括加载、验证、准备、解析、初始化、使用和卸载7个阶段,其中验证、准备、解析这3个部分统称为连接,如下图所示。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。注意,这里的几个阶段是按顺序开始,而不是按顺序进行或完成的,因为这些阶段通常都是互相...

2019-07-26 11:36:43

Java内存模型及分区

对于一个Java开发者,了解Java中的对象、变量等存放的内存区域是十分重要的。本文将全面讲解Java虚拟机中的内存模型和分区。Java虚拟机把管理的内存划分为几个不同的数据区域,如下图所示。下面就分别展开讲解一下每个区域的功能。1. Java堆Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,所有的对象实例以及数组都要在堆...

2019-07-25 11:19:46

Java多线程:彻底搞懂线程池

熟悉Java多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。目录1 线程池的优势2 线程池的使用3 线程池的工作原理4 线程池的参数4.1 任务队列(workQueue)4.2 线程工厂(threadFactory)4.3 拒绝策略(handler)5 功能线程池5.1 定长线程池(FixedThreadP...

2019-07-09 19:27:00

Android经验:TimeoutException问题分析与解决

问题概述在我们项目开发中,在Crash收集平台可能会经常遇到TimeoutException相关的Crash,通常在OPPO的Android 5.0 - 6.0的手机会复现,输出的堆栈日志大概有下面几种:java.util.regex.Pattern.finalize() timed out after 120 secondscom.android.internal.os.Binder...

2019-07-05 17:20:17

Android主流Router库对比(ARouter、ActivityRouter)

本文对Android主流的Router库的异同进行对比,包括阿里的ARouter和mzule的ActivityRouter,详见下表: 类型 ARouter ActivityRouter GitHub地址 https://github.com/alibaba/Arouter htt...

2019-07-01 20:16:36

Android动态界面开发框架VirtualView之Page、Scroller数据绑定

相信有过Android开发经验的朋友们都了解ViewPager、RecyclerView的使用,当绑定每一项数据时,需要在相应的Adapter的instantiateItem()或onBindViewHolder()方法中去实现。在Android动态界面开发框架VirtualView使用完整教程中我们学习了VirtualView基本的使用方法,在这里容器组件Page和Scroller等就类似于...

2019-05-23 21:40:08

Android动态界面开发框架VirtualView使用完整教程

阅读本文大概需要20分钟在Android动态界面开发框架Tangram使用完整教程我们学习了Tangram的使用。在 Tangram 体系里,页面结构可以通过配置动态更新,然而业务组件是通过 Java 代码实现的,无法动态更新。VirtualView 就是为了解决业务组件的动态更新而生的,它提供了一系列基础 UI 组件和布局组件能力,通过 XML 来搭建业务组件,并将 XML 模板编译...

2019-04-25 17:48:18

Android动态界面开发框架Tangram使用完整教程

阅读本文大概需要20分钟熟悉阿里出品的vlayout的读者都知道,vlayout极大地扩展了RecyclerView的LayoutManager,从而为RecyclerView提供了一组布局。使用该开源项目,可以让我们在同一个RecyclerView里处理线性、网格等等各种复杂的布局。然而,使用vlayout时,一切都需要用Java代码实现,而且都是写在客户端上,一旦需要修改就必须发版,不...

2019-04-25 16:51:20

Android非全屏的Window无法设置SYSTEM_UI_FLAG_LIGHT_STATUS_BAR问题分析

小编在做沉浸式状态栏功能时,遇到一个这样的问题:当我在一个Dialog的onCreate()方法中执行下面的代码:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_...

2019-03-29 14:58:24

Mac Android Studio修改注释模板中的${USER}变量

在/Application/下找到Android Studio,右键-显示包内容打开/Android Studio/Contents/bin/studio.vmoptions,用Sublime编辑器打开,在最后一行添加-Duser.name=Jimmy(修改为自己想要的名称)然后重启Android Studio。如下图所示: 参考链接:https://blog.csdn....

2019-01-15 16:48:06

Android Studio全局关键字搜索忽略R.java文件

在Android Studio中,我们经常会使用到全局关键字搜索功能,但是常常会在搜索结果中出现R.java或build生成的文件,这大大减少了检索的效率。那么,怎么在搜索结果中忽略掉这些无用文件呢?方法如下:1. 首先打开全局搜索功能,可以通过菜单"Edit"->"Find"->"Find in Path..."或快捷键(我的是Ctrl+H)找到。然后选择“Scope”,再点击右...

2019-01-07 11:30:22

史上最全 Android 应用角标适配方法

Android 8.0之前原生是不支持应用角标的,是各个手机厂商自己在系统中实现的应用角标,并且部分厂商提供了设置的方式,所以需要对各个厂商的系统进行适配。GitHub地址:https://github.com/jimmysuncpt/AppBadge下面是针对各个手机厂商的系统进行适配的原理。目录0 公用方法1 小米(支持)2 华为(支持)3 OPPO(不支持)4...

2018-12-05 10:55:53

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。