Android学习笔记
文章平均质量分 62
倚栏静望
让Bug呆一会儿
展开
-
Flutter自定义Tabbar:tabbar_magic_indicator
运行效果使用与说明代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._create_default_https_context = ssl._create_unverified_context2.读入数据代码如下原创 2020-09-19 23:55:30 · 1425 阅读 · 0 评论 -
Retrofit2.X解析(一)Retrofit基本使用以及动态代理
Retrofit基本使用参考官方文档:https://square.github.io/retrofit/马老师教导我们要穿一手鞋,而且官方文档足够的详细。代理模式在我们使用 Retrofit 进行网络请求时,实际其内部使用 OkHttp 来完成网络请求的,然后,使用我们传入的 “类型转换器” 把响应转换成我们指定的类型。定义了一个接口并调用了该接口的方法,然后就拿到了请求的结果,这看上去非常简洁,而这其中的最功不可没的就是动态代理。代理模式也叫委托模式,是结构型设计模式的一种。在Android中原创 2020-05-27 17:23:54 · 838 阅读 · 0 评论 -
OkHttp3.x解析(一) OkHttp介绍以及基本使用
OkHttp是一个目前流行高效的HTTP客户端:HTTP/2支持允许对同一主机的所有请求共享一个套接字。连接池减少了请求延迟(如果HTTP/2不可用)。透明的GZIP压缩了下载文件的大小。响应缓存完全避免了网络中的重复请求。当网络出现问题的时候OkHttp依然坚守自己的职责,当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当...原创 2020-04-28 15:46:16 · 636 阅读 · 0 评论 -
Android EditText 实现软键盘搜索按钮
把软键盘的回车按键变成搜索按键有以下两种方式1.在代码中控制: etKeyword.setSingleLine(); etKeyword.setLines(1); etKeyword.setImeOptions(EditorInfo.IME_ACTION_SEARCH);2.在xml中添加如下: <EditText ...原创 2020-02-21 11:34:50 · 1753 阅读 · 0 评论 -
Android Q(10) 拍照问题
Android Q官方文档AndroidQ新增的分区存储Android Q文件存储机制修改成了沙盒模式,和IOS神似应用只能访问自己沙盒下的文件和公共媒体文件对于Android Q以下,还是使用老的文件存储方式权限变更Android Q 更改了应用对设备外部存储设备中的文件(如:/sdcard )的访问方式。继续使用 READ_EXTERNAL_STORAGE 和 WRITE_EX...原创 2020-02-05 15:17:18 · 2469 阅读 · 0 评论 -
Android动态权限管理框架PermissionsDispatcher使用介绍
对于动态权限,大家应该都不陌生了,在Android6.0版本加入了动态权限的概念,在Android 6.0之前申明权限只需要在AndroidManifest清单中注册相应权限就可以;Android 6.0以上系统就需要根据权限的等级(普通权限和危险权限)进行权限注册,如果是普通权限还是依照之前的处理方式直接在AndroidManifest清单中注册即可,但是危险权限不仅需要在AndroidMani...原创 2019-11-09 23:22:04 · 2913 阅读 · 0 评论 -
Android6.0动态权限列表、普通权限列表
Android全部权限如下:名称权限值及说明访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30...原创 2019-11-09 22:58:31 · 888 阅读 · 0 评论 -
ContentProvider、ContentResolver、ContentObserver之间的关系
ContentProvider:四大组件的内容提供者,主要用于对外提供数据实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限。其实它也只是一个中间人,真正的数据源是文件或者SQLite等一个应用实现ContentProvider来提供内容给别的应用来操作,通过Cont...原创 2019-03-03 18:24:25 · 3234 阅读 · 0 评论 -
Activity 的启动过程
Activity 的启动过程原创 2019-02-13 22:24:41 · 209 阅读 · 0 评论 -
Android中AsyncTask的使用解析
在日常开发中我们经常需要用到子线程去处理一些相对耗时的任务,例如网络请求、数据库操作、复杂计算。并在任务完成的时候对UI进行更新,对于这种需求,官方给开发者提供了两种方式:Handler以及AsyncTask。对于Handler来说,我们每次使用都需要创建一个新的线程,但如果耗时的操作太多,那么我们需要开启太多的子线程,这样就会给系统带来巨大的负担,也会影响程序的性能。在这种情况下我们就可以考虑...原创 2019-02-28 17:17:21 · 270 阅读 · 0 评论 -
Android 图片压缩之-Luban的使用
Android中图片的OOM一直是一个令人苦恼的事情,尤其是图片上传时压缩的问题,有时候质量跟大小很难兼得。今天推荐一个不错的图片压缩的开源框架:LubanLuban是最接近微信图片压缩的框架,下面放一下对比图:可以说已经很接近微信朋友圈压缩后的效果。导入implementation 'top.zibin:Luban:1.1.8' 使用步骤方法列表异步调用Luban内部采用IO...原创 2018-12-16 22:05:21 · 3558 阅读 · 0 评论 -
Android 使用Messenger实现IPC
Messenger可以在不同的进程中传递Meesage对象,在Message中放入我们需要传递的数据,这样就可以实现数据的跨进程传递与接收。其实Messenger是一种轻量级的IPC,底层的实现是AIDL,下面是Messenger的实现代码package android.os;public final class Messenger implements Parcelable { pr...原创 2018-12-20 22:50:03 · 210 阅读 · 0 评论 -
Flutter实现简单的滑块验证功能
Flutter实现简单的滑块验证功能原创 2019-06-03 22:22:44 · 3582 阅读 · 0 评论 -
android 匹配限定的字符比如表情、中英文、符号
public class FilterUtil { //过滤表情正则表达式 public static final String EMOJI = "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]"; //匹配昵称 public static final String MA...原创 2018-09-28 10:19:34 · 1569 阅读 · 0 评论 -
主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
最近在面试,Android中Handler相关的面试题问到的几率大概有百分之百的样子……有一个问题是这样的,就是在主线程中使用Handler来处理异步,由于Handler中Looper.loop()在没有Message的时候是阻塞状态,但是为什么没有造成ANR呢?大家都知道造成ANR的原因有以下两点:1.当前的事件没有机会得到处理(即主线程正在处理前一个事件,没有及时的完成或者looper被某...原创 2019-03-27 15:47:07 · 1333 阅读 · 1 评论 -
Android SQLite使用详解
在项目开发中,我们基本上会用到数据库去存储数据。虽然现在有着不少的数据库框架,像GreenDao 、LiteOrm、xUtils3等,基本可以满足我们数据库方面的使用需求。之所以写SQLite的使用,主要是用来了解数据库的基本使用,也好在面试中应付面试。使用SQLite, 首先创建一个继承在SQLiteOpenHelper的类,并重写onCreate()和onUpgrade()方法。packa...原创 2019-03-28 17:24:38 · 4827 阅读 · 0 评论 -
Ubuntu 使用命令行安装jdk
最近在虚拟机上部署Android源码,需要用到jdk,之前我在Ubuntu上安装jdk都是先下载,然后解压,然后配置环境变量(不知道Linux上是不是这样命名的),很麻烦,所以在网上找了用命令安装的方式,用了一下,确实简单的多,下面记录下操作步骤。1.打开终端,切换到root模式:如果没有设置root的同学可以用:sudo passwd,来设置root密码。2.输入:sudo apt ins...原创 2019-05-26 12:20:26 · 755 阅读 · 0 评论 -
Android Q(10.0)版本新特性以及兼容性适配
北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了。Android Q 为开发者们带来了许多新功能,如折叠屏增强项、新网络连接 API、全新的媒体解码器、摄像头新功能、NNAPI 扩展、Vulkan 1.1 图形支持等等。按往常的习惯,新版本刚出怎么着也得到下半年才开始考虑适配,但是上月末的...原创 2019-06-04 13:24:41 · 8016 阅读 · 2 评论 -
Android动态修改icon、APP名称
之所以有这个需求,完全就是因为软著上写错名字了,如果APP名称跟软著不一致,还不能上架……提醒以后申请软著的童鞋,一定要注意名称的问题下面贴实现代码: <application android:name=".application.ExceptionApplication" android:allowBackup="true" an...原创 2019-06-17 22:38:06 · 3954 阅读 · 0 评论 -
flutter中状态栏高度等信息
// 状态栏高度 double _statusBarHeight = MediaQuery.of(context).padding.top;//MediaQuery.of(context)这个里面还有其他信息,你们自行发掘吧// appbar 高度 double _kLeadingWidth = kToolbarHeight;...原创 2019-07-16 19:43:09 · 1977 阅读 · 0 评论 -
flutter 再按一次退出 导航返回拦截WillPopScope
为了避免用户误触返回按钮而导致APP退出,在很多APP中都拦截了用户点击返回键的按钮,当用户在某一个时间段内点击两次时,才会认为用户是要退出(而非误触)。Flutter中可以通过WillPopScope来实现返回按钮拦截,我们看看WillPopScope的默认构造函数:const WillPopScope({ ... @required WillPopCallback onWillPop...原创 2019-08-01 23:46:25 · 1684 阅读 · 0 评论 -
Android开发:RecyclerView全面解析
RecyclerView是support-v7中提供的新的滑动组件,最低兼容到API11。RecyclerView可实现的功能类似ListView、GridView以及已废弃的Gallery。我们可以用RecyclerView很快速的实现复杂的列表布局。 RecyclerView优势在于:低耦合高内聚。主要优点有:1.RecyclerView封装了viewholder...原创 2017-10-30 09:09:09 · 4426 阅读 · 0 评论 -
Android Service保活方法总结
在Android开发中我们经常会需要让一个Service长久的存活下去,直到海枯石烂,但是总有一些刁民想干掉朕的服务,比如手机内存不足、应用被关闭、重启手机、手机息屏被释放内存、手动清理内存等…… 因此我们要保证一个Service长久存活下去就需要解决掉上面说的这些刁民。下面介绍几种常用的服务保活的方法。 1 onStartCommand方法,返回START_STICKY 在运行onStar...原创 2018-08-25 22:51:25 · 10633 阅读 · 0 评论 -
Android消息机制、Handler工作原理和十万个为什么之为什么postDelayed可以延时
Android消息机制概述Android的消息机制主要是指Handler的运行机制以及支撑Handler工作的MessageQueue和Looper的工作过程。Handler主要作用是将一个任务切换到某个指定的线程中执行。由于在Android3.0之后规定访问UI只能在主线程中进行,所以Handler在此有了用武之地。为什么不再允许在子线程中访问UI呢?因为Android的UI控件不是线程安全...原创 2018-08-20 00:02:19 · 1339 阅读 · 0 评论 -
Android缓存策略
在Android中缓存策略有着广泛的应用场景,尤其是在图片加载从应用场景下,基本上都要用到缓存。因为图片加载需要消耗很大量的流量,在移动应用开发中不能过多的消耗用户的流量,一是因为流量是收费的,第二是过大的请求量会造成图片加载很慢用户体验不好。因此在图片加载过成功就要使用到缓存。图片缓存就是当程序第一次从网络加载图片之后,将图片缓存到移动设备上,下一使用这张图片的时候直接从存储中读取,就不用再...原创 2018-08-17 23:11:29 · 2441 阅读 · 0 评论 -
Android Binder学习指南
Binder是Android系统中最重要的特性之一,直观来说,Binder是Android中的一个类,它实现了IBinder接口。从Android Framework角度来说,Binder是ServiceManager连接各种Manager和相应的ManagerService的工具;从IPC角度来说,Binder是Android中的一种跨进程通信的方式;从Android应用层来说,...原创 2017-12-11 14:18:41 · 3989 阅读 · 0 评论 -
Android解决View滑动冲突
常见的滑动冲突场景1.外部滑动方向和内部滑动方向不一致2.外部滑动方向和内部滑动方向一致3.以上两种嵌套原创 2017-12-11 14:06:02 · 3730 阅读 · 0 评论 -
Android:全屏幕拖动控件的实现
/** * Created by liguoxian on 2017/12/6. */public class TextButon extends AppCompatTextView { private final static String TAG = "TextButon"; private int mScaledTouchSlop;//屏幕最小滑动距离 //记原创 2017-12-11 14:04:17 · 4187 阅读 · 0 评论 -
Android的IPC机制(一)多进程模式以及IPC基础概念
(1)IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。(2)ANR是Application Not Responding的缩写,即应用无响应。主线程执行大量的耗时操作容易导致ANR现象发生。(3)在Android中最有特色的进程间通信方式就是Binder了,通过Binder可以轻松地实现进程间通信。原创 2017-12-11 14:01:58 · 4110 阅读 · 0 评论 -
Android:AIDL使用与详解
AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是的,首先我们知道的第一点就是:AIDL是一种语言。既然是一种语言,那么相应的就很自然的衍生出了一些问题:为什么要设计出这么一门语言? 它有哪些语法? 我们应该如何使用它?接下来,我们就一步步的来解答上面的这些问题。1.为什么要设计这门语言?设计...原创 2017-12-11 14:00:15 · 3716 阅读 · 0 评论 -
java基本数据类型
1.java基本数据类型Java中有8中基本数据类型,其中6种是数值类型,另外两种是字符类型以及布尔类型。6种数值类型中,4种是整数类型,2种浮点类型:整数类型包括btye、short,int 、long。浮点型包括 float、double;字符类型包括 char 、string。原创 2017-05-22 10:29:37 · 4767 阅读 · 0 评论 -
Android自定义view基础
在日常开发中我们经常会因为系统控件的不足而需要自定义View,那么自定义View要如果下手呢?本文将从View的工作原理和自定义View的实现两个方面教大家学会自定义View。ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的measure、layout和draw都是通过ViewRo...原创 2017-10-29 22:20:10 · 4171 阅读 · 0 评论 -
Android之Activity生命周期总结(一)
Activity作为四大组件之一,是使用频率最高的组件,也是直接为用户提供主体的操作主件,基本上我们在Android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发Android应用程序是非常必要的,通过最近对Android的学习加之自己的理解进行一下总结。原创 2017-08-19 16:53:07 · 4932 阅读 · 0 评论 -
Activity的启动模式
在默认情况下,我们多次启动同一个Activity时,系统会创建多个实例,并保存在任务栈中。当我们通过返回键关闭掉Activity时,这些Activity会一一的回退,因为任务栈遵循后进先出的原则。目前Activity有4种启动模式:standard、singleTop、singleTask、singleInstace。standard:是标准启动模式,也是系统默认的启动模式。就是每次启动一原创 2017-07-24 15:54:56 · 5002 阅读 · 2 评论 -
IntentFilter的匹配规则,显示调用和隐式调用
在Android中启动Activity分为两种,原创 2018-07-03 23:17:47 · 595 阅读 · 0 评论 -
Android开发Parcelable使用详解
想要在两个activity之间传递对象,那么这个对象必须序列化,android中序列化一个对象有两种方式,一种是实现Serializable接口,这个非常简单,只需要声明一下就可以了,不痛不痒。但是android中还有一种特有的序列化方法,那就是实现Parcelable接口,使用这种方式来序列化的效率要高于实现Serializable接口。不过Serializable接口实在是太方便了,因此在某些原创 2017-12-11 14:20:28 · 4576 阅读 · 0 评论 -
Android中Drawable类详解
Drawable表示的是一种可以再Canvas上进行绘制的抽象概念,在开发中用到最多的颜色跟图片都可以用一个Drawable表示。Drawable使用简单,比自定义View成本低,非图片类型的Drawable占用空间小。Drawable的分类1.BitmapDrawable它标识的就是一张图片。在实际开发中我们可以直接引用原始的图片即可,但也可以通过XML的方式来描述它,通过XML来描...原创 2018-01-31 17:10:11 · 2542 阅读 · 0 评论 -
十万个为什么之为什么postDelayed可以延时
本来是跟消息机制写在一起的,但是藏的比较深,单拎出来。曾经有个同学去去面试,被问到MessageQueue遵循FIFO(先入先出),为什么postDelayed可以延时?下面从源码的角度来分析下这问题。首先我们做一个测试,看这个延时的消息是否被添加到MessageQueue里面去: private void testPostDelayed(){ boolean ...原创 2018-08-05 16:53:57 · 1165 阅读 · 0 评论 -
ConstraintLayout介绍和使用
一、什么是ConstraintLayout?ConstraintLayout 中文意思为约束布局,也有人称之为增强型的相对布局,由 2016 年 Google I/O 推出。扁平式的布局方式,无任何嵌套,减少布局的层级,优化渲染性能。从支持力度而言,将成为主流布局样式,完全代替其他布局。有个成语用的非常好,集万千宠爱于一身,用到这里非常合适,约束集 LinearLayout(线性布局),Rel...原创 2018-07-27 23:21:58 · 750 阅读 · 0 评论 -
RemoteViews的作用和工作原理
RemoteViews的基本概念什么是RemoteViews呢?RemoteViews是一种远程View,它提供了一组基础的操作用于跨进程更新页面。RemoteViews主要有两个应用场景:自定义通知栏和桌面小部件。1 自定义通知栏使用首先我们看系统默认的通知栏的是怎么实现的: Notification.Builder builder; Intent intent;...原创 2018-07-30 23:23:06 · 513 阅读 · 0 评论