
android
文章平均质量分 93
青杉`
这个作者很懒,什么都没留下…
展开
-
源解 Glide V4.10.0
Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。原创 2024-04-23 11:45:53 · 970 阅读 · 0 评论 -
Android电量/功耗优化指南
电能 = 电压 * 电流 * 时长模块电量(mAh) = 模块电流(mA) * 时长(h)系统电量优化红线规则华为电量优化红线规则。原创 2024-03-11 13:58:34 · 2963 阅读 · 0 评论 -
Android 监听网络状态变化(无切换中间态版)
ConnectivityManager#registerNetworkCallback() 是监听所有网络变换的,监听范围广,但无法得知当前“系统默认网络”是什么,可以实现判断网络状态,但无法判断网络类型。广播监听 与 ConnectivityManager#registerDefaultNetworkCallback() 都是监听“系统默认网络”,所以可以实现网络状态与类型的判断,但都存在重复回调的情况,所以要做过滤处理,以及“系统默认网络”切换到普通网络时会有偶现短暂“无网络”状态,需要做延迟处理。原创 2024-01-16 10:19:30 · 3458 阅读 · 0 评论 -
Android低功耗蓝牙开发总结
记住一个核心:蓝牙传输非常不稳定,指不定啥时候就没响应或丢包了。原创 2024-01-05 10:45:38 · 2170 阅读 · 0 评论 -
Flutter 混合开发 - 动态下发 libflutter.so & libapp.so
明确只在打 release 包时才需要剔除(因为谁关心 debug 包包体积呀!确定剔除 Task 执行的时机。剔除要在 merge 所有 so 之后才行,通过查看 task 列表,发现 “mergeReleaseNativeLibs” 就是非常不错的时机。@Override//只在 release 变体下生效if (!//自定义 Gradle Task//指定自定义 Task 执行时机:mergeReleaseNativeLibs -> flutterSoDynamicRelease。原创 2024-01-02 14:42:07 · 3544 阅读 · 1 评论 -
MV*系列架构模型
浅谈对 MVC、MVP、MVVM、MVI 的理解原创 2023-01-07 10:30:52 · 702 阅读 · 0 评论 -
Android Studio 插件 — 开发工具类搜集
随着代码量的不断增加,为了开发方便,提取出了各种工具类/方法,但由于没有查询方式,往往只能是谁加的谁知道用,而其他人由于不知道已有该工具类/方法,所以无脑又新建了一个。这就导致项目体积增大,并且可维护性大大降低。举个例子,项目有单位的处理的工具方法(例如大于1000显示K()大写),但其他人不知道又重新建了个方法,某天要求所有地方的单位都统一成k(小写),只能挨个功能搜索看用的那个方法处理的,这就出现嘞无用功,而且还容易遗漏。原创 2022-09-22 11:22:37 · 3317 阅读 · 1 评论 -
Jetpack 组件之 ViewModel 使用与浅析
ViewModel 是什么?官方解释:The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.个人理解: ViewModel 是 UI 和数据的桥接层,承担 UI 层(Activi原创 2021-06-19 17:10:17 · 329 阅读 · 0 评论 -
Jetpack 组件之 Lifecycle 使用与浅析
Lifecycle 是什么?官方解释:Lifecycle is a class that holds the information about the lifecycle state of a component (like an activity or a fragment) and allows other objects to observe this state.个人理解:Lifecycle 就是管理组件( Activity / Fragment )生命周期的一个工具(类),可以在其他原创 2021-06-05 21:25:42 · 339 阅读 · 1 评论 -
【设计模式】设计原则-SOLID、DRY、KISS、YAGNI、LOD
修改记录修改时间备注新建2021.02.09整理自极客时间-王争的设计模式之美(推荐购买学习)1. SOLID原则1.1 SRP(Single Responsibility Principle) 单一职责1.1.1 定义:一个类或模块只负责完成一个功能。理解:不要设计大而全的类,要设计粒度小、高性能单一的类。该原则的目的是为了实现代码高内聚、低耦合、提高代码复用性、可读性以及可维护性。1.1.2 以下场景可能会出现类没有指责单一:类中的代码行数、函数、属性是否过多...原创 2021-02-06 20:30:46 · 2050 阅读 · 0 评论 -
MVPCommonLib 实现快速搭建开发MVP APP
最近在 github 上上传了我的第一个小项目 MVPCommonLib,正确的说应该是 Android Module。该 Module 是通过 Kotlin 开发,包含搭建 MVP+Retrofit+RxJava 需要的基础类以及日常开发中的部分工具类,希望能帮助大家更加快速的搭建 APP。接下来让我们看一下该 Module 中都有哪些东西吧。Modul...原创 2019-02-26 22:59:20 · 480 阅读 · 0 评论 -
带你了解 getLayoutInflater().inflate() 与 View.inflate() 的区别(实例+源码)
BRVAH(BaseRecyclerViewAdapterHelper)这个框架我想做Android的应该都比较熟悉了,如果不熟悉的可以百度,这里就不啰嗦了。最近在使用该框架给横向 RecyclerView 添加底部布局时出现了问题:添加的底部布局(footer_view)的 layout_width 和 layout_height 都是写死的值,但是当 add 进去之后滑动 RecyclerV...原创 2019-02-24 15:59:11 · 4198 阅读 · 0 评论 -
ijkplayer 编译详解
本文转自 ijkplayer编译so库真没那么难 1.如何使用ijkplayer官方:https://github.com/Bilibili/ijkplayerbuild.gradle添加下述依赖引用即可:dependencies { # 对于大部分的设备来说已经够用了 compile 'tv.dan...转载 2018-08-17 11:25:09 · 1625 阅读 · 0 评论 -
Android 控件阴影实现
转自:Reiser实验室 https://www.jianshu.com/p/bcbd0769e7ac———————————————————————————————————— 让 View 产生阴影有以下 4 种方式:控制 elevation使用 OutlineProvider使用 9 图使用 MD 风格的控件,如 CardView,F...转载 2018-05-14 13:55:05 · 16810 阅读 · 2 评论 -
实现Android透明状态栏(或叫沉浸式状态栏)
最近接触到一个项目,发现了一个实现透明状态栏的第三方jar包,感觉挺好用的,跟大家分享一下。github地址:https://github.com/jgilfelt/SystemBarTintAS导入地址:compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’在项目中使用时,可以封装成一个方法:pub...原创 2017-09-19 13:53:26 · 869 阅读 · 0 评论 -
Android权限大全
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米获取精转载 2017-08-08 14:37:12 · 357 阅读 · 0 评论 -
SharedPreference.Editor的apply和commit方法异同
这两个方法的区别在于: 1. apply没有返回值而commit返回boolean表明修改是否提交成功 2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。 3. apply方法不会提示任何失败的提示。 由于在转载 2017-07-24 17:01:26 · 342 阅读 · 0 评论 -
android:screenOrientation的说明
Activity在屏幕当中显示的方向。属性值可以是下表中列出的一个值:"unspecified"默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。"user"使用用户当前首选的方向。"behind"使用Activity堆栈中与该Activity之下的那个Acti转载 2017-07-25 09:01:44 · 421 阅读 · 0 评论 -
android:contentDescription属性作用
在.xml布局中使用“android:contentDescription”属性主要目的是为了帮助个别用户使用,这个作用是在用户不清楚你写的这个控件是什么时候,同时用户打开了手机中的辅助工具(如TalkBack),这样这个辅助工具就可以读出该属性设置的值。举个栗子吧:前提:用户是一名色盲或者色弱用户,手机打开了辅助工具(如TalkBack)你的布局空间: <ImageView原创 2017-07-25 14:51:42 · 3126 阅读 · 0 评论 -
Android Fragment预加载与懒加载问题
Fragment预加载:当ViewPager+Fragment实现滑动页面时,当进入第一个页面时,第二个页面的内容(即页面需要填充的内容或逻辑)就会被提前加载出来,这会严重影响性能。Fragment懒加载:为解决Fragment预加载导致性能降低出现的方法。Fragment懒加载包括两种方式:1、禁止Fragment预加载,重写ViewPager,但是这种方式会导致滑动卡顿,影响用原创 2017-07-26 17:20:53 · 2756 阅读 · 0 评论 -
利用CountDownTimer实现倒计时,跳转界面
利用CountDownTimer实现倒计时。 举个栗子,引导页面最后一个界面要停留5s跳转到登录页面。代码如下://假设 这是引导页面最后一个界面public class MainActivity extends Activity { private TextView count_time; private MyCountDownTimer myCountDownTim...原创 2017-07-27 08:40:45 · 1739 阅读 · 0 评论 -
动态更改应用桌面图标
基础部分: activity-alias:可以用于创建多个不同的入口 android:enabled:默认为 true,创建多个入口时,先修改为 false。 android:icon:应用图标 android:label:应用名称 android:name:activity-alias 的别名 android:targetActivit...原创 2017-12-04 15:44:13 · 503 阅读 · 0 评论 -
自定义View笔记(三) --- ViewDragHelper
注:该笔记是整理学习鸿洋大神自定义View系列博客的部分知识点。ViewDragHelper 可以用于自定义 ViewGroup 中子 View 的拖动等效果。 使用方式: 1.创建实例 在构造方法中调用ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback(){ }); 创建实例时,需要传入三个参...原创 2017-10-20 15:10:19 · 384 阅读 · 1 评论 -
自定义View笔记(二) ---深入理解自定义属性
注:该笔记是整理学习鸿洋大神自定义View系列博客的部分知识点。一、TypedArray 与 AttributeSet 获取 View 属性的区别 AttributeSet获取方式:public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); int count = a...原创 2017-10-20 14:55:30 · 469 阅读 · 0 评论 -
自定义View笔记(一)
注:该笔记是整理学习鸿洋大神自定义View系列博客的部分知识点。自定义View(自定义控件)四大步骤:1. 自定义View的属性2. 在View的构造方法中获取自定义的属性3. 重写onMesure() 不是选项4. 重写onDraw()自定义View属性/** 在res/values下建立一个attrs.xml文件 */<resources&g...原创 2017-10-20 14:44:48 · 281 阅读 · 0 评论 -
AIDL的实例讲解
前言: 关于AIDL的介绍与原理不会在这里赘述。在这里通过一个简单“加法计算器”实例来告诉你AIDL到底是怎么用的。正文: 1、在项目包中创建一个.aidl文件 2、在新建的.aidl文件中实现要做的逻辑方法。这里要做一个加法处理。interface IAdditionService { /** * Demonstrates some basic types...原创 2017-10-11 12:03:32 · 674 阅读 · 0 评论 -
RxJava学习笔记(一)
该笔记通过“RxJava 详解”学习记录学习RxJava之前需要了解“观察者模式”RxJava四个基本概念1、Observable — 被观察者 2、Observer — 观察者 3、Subscribe — 订阅 4、事件RxJava有两种事件:1、普通事件 onNext() 2、特殊事件 onCompleted() — 时间队列完结。当不会再...原创 2017-09-22 17:46:01 · 425 阅读 · 0 评论 -
安卓隐藏键盘与点击空白区域隐藏键盘
隐藏键盘 1.在Manifests文件中实现 android:windowSoftInputMode=”stateHidden|adjustResize” 2.在Activity点击事件中实现 (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE).hideSoftInputFr...转载 2017-07-31 11:29:00 · 530 阅读 · 0 评论