开发高级技巧
Android 开发技巧
WentuoLi
Mac程序员
展开
-
ConstraintLayout
Relative positioning is one of the basic building blocks of creating layouts in ConstraintLayout. Those constraints allow you to position a given widget relative to another one. You can constrain a widget on the horizontal and vertical axis:相对定位是约束布局中创建.原创 2020-09-06 09:35:10 · 201 阅读 · 0 评论 -
布局和绑定表达式
借助表达式语言,您可以编写表达式来处理视图分派的事件。数据绑定库会自动生成将布局中的视图与您的数据对象绑定所需的类。数据绑定布局文件略有不同,以根标记 layout 开头,后跟 data 元素和 view 根元素。此视图元素是非绑定布局文件中的根。以下代码展示了示例布局文件:option+enter<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/原创 2020-09-05 10:13:04 · 194 阅读 · 0 评论 -
LiveData
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。使用 LiveData 的优势使用 LiveData 具有以下优势:请按照以下步骤使用 LiveData 对象:创建 LiveData 实例以存储某种类型的数据。这原创 2020-09-05 10:12:17 · 131 阅读 · 0 评论 -
ViewModel
实现 ViewModel架构组件为界面控制器提供了 ViewModel 辅助程序类,该类负责为界面准备数据。在配置更改期间会自动保留 ViewModel 对象,以便它们存储的数据立即可供下一个 Activity 或 Fragment 实例使用。例如,如果您需要在应用中显示用户列表,请确保将获取和保留该用户列表的责任分配给 ViewModel,而不是 Activity 或 Fragment,如以下示例代码所示: public class MyView原创 2020-09-05 10:11:23 · 219 阅读 · 0 评论 -
保存界面状态
管理界面状态:分而治之您可以通过在各种类型的持久性机制之间划分工作,高效地保存和恢复界面状态。在大多数情况下,这些机制中的每一种都应存储 Activity 中使用的不同类型的数据,具体取决于数据复杂度、访问速度和生命周期的权衡:本地持久性存储:存储在您打开和关闭 Activity 时不希望丢失的所有数据。示例:歌曲对象的集合,其中可能包括音频文件和元数据。ViewModel:在内存中存储显示关联界面控制器所需的所有数据。示例:最近搜索的歌曲对象和最近的搜索查询。onSaveIns.原创 2020-09-05 10:10:53 · 181 阅读 · 0 评论 -
java算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度:平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序原创 2020-09-04 10:20:05 · 208 阅读 · 0 评论 -
Application自动初始化(初始化器)
lib无需在App进行初始化无需依赖自动初始化导入初始化器依赖 implementation 'androidx.startup:startup-runtime:1.0.0-alpha01'在lib清单列表中注册该初始化器<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package.原创 2020-09-03 13:54:48 · 247 阅读 · 0 评论 -
通过注解在编译器前生成代码
APT 技术Java注解处理器使用详解注解处理器运行是不会被打包apk,是在运行前生成代码否则会发生jar冲突,手机系统已经存在JavaPoet是一款可以自动生成Java文件的第三方依赖需求当前lib需要得到app参数时使用APT技术通过注解在编译器前生成代码来获取app中的参数1.自定义注解根据需要得到的参数定义注解(可以是TYPE,PARAMETER,PACKAGE,LOCAL_VARIABLE)导入依赖 annotationProcessor 'com.google原创 2020-09-03 13:52:26 · 299 阅读 · 0 评论 -
封装三方依赖步骤
1.打开Project找到两个gradel文件2.项目根目录创建version.gradel文件3.在项目gradel导入version.gradel4.配置version.gradel5.在app gradel 引入依赖原创 2020-09-03 11:58:29 · 181 阅读 · 0 评论 -
Java定义 进制变量
Java中数值变量的声明:二进制变量的声明以0b为前缀;八进制变量的声明以0为前缀;十六进制变量的声明以0x为前缀。二进制、八进制、十六进制数值在运用时候自动转为对应的十进制的值public static void main(String[] args) { int a = 0b11; //声明二进制变量 int b = 011; //声明八进制变量 int c = 11; //声明十进制变量 int d = 0x11; //声明十六原创 2020-09-03 11:57:35 · 819 阅读 · 0 评论 -
Android Studio debug 进阶
Love Googledebug过滤不需要的信息Show packageShow processshow date time你还可以使用日志过滤器log taglog messagepackage name折叠无用的信息折叠无用信息展开信息让运行中的app快速进入debug(Attach Debugger to Android Process)拖动断点让debug继续向下运行在debug中添加断点条件比如我们在一个for循环中只想要i==5的原创 2020-09-03 01:12:28 · 79 阅读 · 0 评论 -
开发思想: 对象复用
The ANDROID recommended application architecture recommends breaking code into multiple classes to benefit from the principle of Separation of concerns, where each class of the hierarchy has a defined responsibility. This requires wiring together more and.原创 2020-09-02 13:46:49 · 277 阅读 · 0 评论 -
ViewModel
ViewModel is a class that is responsible for preparing and managing the data for an [Activity] or a [Fragment].ViewModel 是一个类,负责准备和管理活动或片段的数据。它还处理 Activity/Fragment 与应用程序其余部分的通信(例如调用业务逻辑类)。A ViewModel is always created in association with a scope (a f.原创 2020-09-02 13:44:32 · 168 阅读 · 0 评论 -
使用Lifecycle全局监听Fragment的生命周期
1.得到Lifecycle对象 public void setLifecycleOwner(LifecycleOwner lifecycleOwner) {//设置监听 this.mLifecycleOwner = lifecycleOwner; mLifecycleOwner.getLifecycle().addObserver(this); }2.通过Lifecycle的对象// 通过Lifecycle监听生命周期 //条件注解监听具.原创 2020-09-02 13:43:25 · 2655 阅读 · 0 评论 -
接口化编程
使用接口编程,提共所需的方法让类取实现。避免伴随类的生成。降低代码的耦合度解决接口冲突当两个接口同时提供了默认方法,必须覆盖这个方法来解决冲突案例:public class SameInterface implements Person,Named{ public static void main(String[] args) {}@Overridepublic String getName() { // TODO Auto-generated method stub retur原创 2020-09-02 12:17:36 · 465 阅读 · 0 评论