Gradle Kotlin DSL

Gradle Kotlin DSL

[TOC]

我觉得你们可以先看最后的彩蛋再决定是不是要看

强烈推荐先看文章最后的彩蛋!!!

为什么选择 Gradle Kotlin DSL

首先我们要先明确我们这么做的原因有哪些?是否值的我们从 groovy 迁移到 kotlin.

Kotlin 相比于 Groovy 有这么几个好处:

Read More

自定义视图及其性能

Custom Views and Performance

Android 平台自带了很多标准控件,但是你总会发现有无法满足你的需求的时候,这时候你可以使用自定义控件.自定义控件是很容易的,困难的是怎么让自定义控件的性能表现良好.这里将会介绍一些会导致自定义控件表现变差的原因.

  • 在没有改变的时候仍然调用了 onDraw()
  • 耗费时间和资源绘制根本不会再界面上展示的像素.比如被遮挡住的部分
  • 我们还可以在 onDraw 中花很长的时间
Read More

工具 严格模式

Tool: Strict Mode

[TOC]

背景

当你的应用中的事件处理超过了 5 秒钟没有响应的时候,Android 会弹出一个 ANR 弹窗. 这是因为 UI 线程被阻塞了,它在等待某些事情的完成.因为 UI 线程是唯一一个可以处理输入和绘制的线程,当它停止响应的时候,你的 app 也停止了响应.

那么什么会导致 UI 线程像这样停止呢?通常情况下系统调用可以无期限的阻塞它,就像磁盘或者网络获取.这些阻塞调用是你应用中的定时炸弹.在正常情况下,它们运行的非常快,你甚至无法注意到他们.但在某些软件和硬件条件以及一些运气的情况下,他们爆炸了.

方案

接下来我们来介绍一下如何找到这些隐藏的问题.这个工具的名字叫 Strict Mode ,你可以在 开发者模式中勾选上 Strict Mode Enabled 来启动它.当它是启动的时候,在你的应用中如果有在 UI 线程中的耗时操作的时候屏幕的边框会变成红色的.

Strict Mode 实际上定义了你在什么线程中可以做什么事,它有点像一个运行时的 Lint . 它是对你的线程策略做了一个规定,策略是由两个部分呢组成的

Read More

LeetCode 9. Palindrome Number

9. Palindrome Number

判断一个整数是不是一个回文。不要使用额外的空间。


提示:
负整数可以是回文吗?(比如-1)

如果你想要将整数转换成字符串,注意使用额外的空间的限制。

你还可以尝试反转整数。然而,如果你已经解决了”Reverse Integer” 这个问题,那你应该知道反转一个整数可能会造成溢出。你要如何处理这种情况?

Read More

LeetCode 9. Palindrome Number

[English ver]

9. Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.


click to show spoilers.

Some hints:
Could negative integers be palindromes? (ie, -1)

Read More

Navigation 指南

Navigation 指南

[TOC]

由于官网暂时没有中文版本,所以在这里根据内容抽空做了一些中文的版本.

Navigation 是用来管理你的app中内容的跳转,返回等操作.它主要包含了以下三个部分:

  • Navigation graph : 一个 xml 资源包含了所有的导航相关的信息. 这些信息包含了你app里所有独立的内容区域,也就是 destinations .
Read More

开始使用 Navigation

开始使用 Navigation

[TOC]

由于官网暂时没有中文版本,所以在这里根据内容抽空做了一些中文的版本.

开始使用

依赖引入

1
2
3
4
5
6
dependencies {
def nav_version = "2.1.0-alpha05"
implementation "androidx.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "androidx.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

最新版本清关注官方版本 https://developer.android.google.cn/jetpack/androidx/releases/navigation#declaring_dependencies

创建一个导航图

Navigation 发生在 app 内目的地之间的跳转.这些目的地通过action 进行连接.

Read More

使用 Lint 来获取性能贴士

使用 Lint 来获取性能贴士

[TOC]

背景

当我们在编写 Android 代码的时候如何能够快速优化我们的代码呢?

Android 为我们提供了一个 Lint 的工具,它可以静态检验出我们代码里的很多问题.风格,内存泄露,过度绘制等等…

使用方法

在 Android studio 的菜单中选择 Analyse -> Inspect Code 就可以进入检查页面了.

他还可以在设置里的 Editor -> Inspections 中设置提示的等级,以及自定义检查项,可以说是非常好用的功能了.

Read More

自动版本号发布

自动版本号发布

[TOC]

背景

由于手动升级版本号等操作容易被遗忘和操作错误,,所以要找到一个可以自动管理版本号的方式.

内容

版本控制主要有这么两个属性:

  • android:versionCode : 整数,是内部版本号,用于判断一个版本是否比另一个版本新,用户并不需要看到。通常是跟随着发布版本增加该code。如果安装的app 的 versionCode 比当前该 app 的 versionCode 小的话会导致安装失败,提示无法降级安装.

Read More

Gradle 使用技巧 [Chinese ver]

Gradle Skill

[TOC]

BuildConfig字段

BuildConfig 字段有默认生成的和自定义的字段,他们在编译后会自动生成到 app/build/source/BuildConfig/Build Varients/package name/BuildConfig 文件。内容如下:

1
2
3
4
5
6
7
8
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0";
}

这是一般工程里都会有的字段.

这里要介绍的是自定义的字段,我们通过自定义的字段可以配置不同 buildTypes 和不同版本的字段。可以用它来便捷的控制许多功能,比如 Log 打印等等。

自定义字段

Read More
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×