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

Serializable

Serializable

通过实现 java.io.Serializable 可以让 class 实现序列化的功能,否则无法使用序列化的功能。一个实现序列化的类的子类都是可以进行序列化的。Serializable 接口没有方法,字段等只是一个标记它是可以序列化的作用。

序列化是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或在网络中传送),并在需要的时候恢复原先状态的过程。

当子类实现了 Serializable 接口而父类没有实现的时候,父类要有一个可以访问的无参构造函数。

在反序列化的时候,没有实现序列化的类字段将会使用 public 或者 protect 的无参构造函数进行初始化。无参构造函数必须是实现序列化的子类可访问的,

如果需要在序列化和反序列化的时候进行一些特殊操作的话,需要自己实现以下某些方法:

Read More

LRU 缓存的魔力

LRU 缓存的魔力

场景

假设这么一个情况,当你需要多次展示同一个图片的时候,如果你重复从硬盘中加载图片的话,那么会造成资源的浪费,甚至可能会OOM.

这个时候我们可以使用 cache 来避免这种情况,我们只从硬盘中加载一次到内存中,然后在需要的时候反复使用这个照片.

但是,当这个 cache 里的资源已经装满的时候,那么我们就必须移除cache里面的某些数据,来给要加入的数据腾出空间.

解决方案

在这种情况下,我们应该选择移除哪些资源才是最有优的呢?显而易见的,我们应该移除之后不会用到的资源,还有就是间隔最久才会用到的资源.这里有一个详细的最优算法如下:
$$
T = m * T_m + T_h + E
$$
其中:

T = 平均内存引用时间

Read More

APP 版本控制

版本管理是app的一个重要部分,他主要的用途有:

  • 让用户了解当前的版本信息,了解升级或者降级信息等
  • 不同的版本可能提供的服务和功能有所差别,版本信息可以给我们一个标志来识别当前版本可提供的服务和功能。

Read More

Android 相关错误及解决办法

目录

问题 : Unable to instantiate activity ComponentInfo{com.xxxx.xxxx/com.xxxx.xxxx.LoginActivity}

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.xxxx.xxxx/com.xxxx.xxxx.LoginActivity}:

Read More
Your browser is out-of-date!

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

×