
其他
文章平均质量分 51
开发中遇到的一些其他问题的总结,并不成系列
任缥缈
天狼啸月的追逐
展开
-
模拟器连不上AndroidStudio的处理方案
模拟器连AndroidStudio的处理方案原创 2022-11-23 11:01:08 · 2343 阅读 · 0 评论 -
Android图片上传的两种方式
图片上传,以及带参数的图片上传是Android开发中,很常见的需求。但也是接口联调难度相对比较大的技术实现,本文介绍两种可靠的图片上传方式。一是通过 MultipartBody 来实现;二是通过图片转字符串来实现。一、通过 MultipartBody 来实现注意事项和重点,都在注释中说明了,就不再啰嗦: // 定义图片文件解析,下面的 * 代表的是要上传的图片的格式,比如:png、jpg、JPEG等等 MediaType MEDIA_TYPE_PNG = Medi原创 2021-10-22 13:39:39 · 11795 阅读 · 0 评论 -
循环遍历remove移除list元素
通常我们通过for循环移除list的所有元素时,都会遇到一个棘手的问题:数组下标越界的问题,因为每移除一个元素,list的长度就会减少一个,这个时候list的长度和当前表示移除元素位置的index的数值就存在不匹配的可能,也就是index > list.size()的情况。那么我们时不时就不能用过该方式实现list的item元素的移除呢?答案是有的: private static void removeList(){ ArrayList<String> stri原创 2021-10-01 11:01:36 · 1099 阅读 · 0 评论 -
downloadFile文件下载封装
private Exception exception;private FileOutputStream fos = null;private InputStream is = null;/** * TODO:文件下载 * @param downurl:下载链接 * @param path::下载文件存放地点 * @param filename:下载文件命名 * @param requestType:请求方式--GET/POST * @param requestProperty:HttpU原创 2021-03-08 00:41:12 · 2292 阅读 · 0 评论 -
精华文章目录
动画系列动画一、细说Animation五大基本动画动画二、Animation动画插值器动画三、ValueAnimator属性动画的基本使用动画四、ValueAnimator属性动画高级进阶(一)动画五、ValueAnimator属性动画高级进阶(二)动画六、ObjectAnimator动画的基本使用动画七、动画的PropertyValuesHolder与Keyframe动画八、联合...原创 2020-05-04 12:26:04 · 234 阅读 · 0 评论 -
重要资料集锦——源码、算法、面试、技术中心等等
Android 面试复习资料2020年Android面试题汇总2020年 中级Android面试总结2020年Android面试题含答案一波Android面试(附答案)10大基础实用算法及其讲解Android程序员算法 part 1Android程序员算法 part 2Handler中的Loop死循环,为什么没有阻塞主线程Activity启动流程源码分Android Servi...原创 2020-05-04 11:11:38 · 269 阅读 · 0 评论 -
synchronized同步锁小记
个类里面有两个synchronized锁的方法,现在在多线程里面调用这两个方法,他们的执行顺序是怎么样的?相信很多人在面试的时候都遇到过这个问题。源码如下:public class ExtendsAndIpmlement { public synchronized void first(int time){ System.out.println("1个打印时间:" + ...原创 2020-04-28 19:57:34 · 193 阅读 · 0 评论 -
三次握手四次挥手的细节
为什么连接的时候是三次握手,关闭的时候却是四次握手?因为三次握手的时候,当Server端收到Client端的SYN连接请求报文后,可以直接发送同步报文SYN+应答报文ACK。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FI...原创 2020-04-28 10:51:20 · 190 阅读 · 0 评论 -
http的get/post区别
请求参数的传递方式:GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中,采用的是uniclde编码。上面的item=bandsaw就是实际的传输数据。因此,GET请求的数据...原创 2020-04-28 10:49:22 · 171 阅读 · 0 评论 -
Service使用说明
与Activity类似,Service也有自己的生命周期函数,在不同的时刻,系统会调用对应的Service生命周期函数,不过与Activity声明周期相比,Service的声明周期更加简单,我们通过官方给出的一张图片来体会并总结一下:1)、普通启动的服务的生命周期:如果一个Service被某个Activity调用Context.startService方法启动,那么不管是否有Activity使...原创 2020-04-28 10:46:00 · 243 阅读 · 0 评论 -
修改SharedPreferences后两种提交方式有什么区别
SharedPreferences类是一个接口类,真正的实现类是SharedPreferencesImpl。修改SharedPreferences需要获取它的Editor,在对Editor进行put操作后,最后通过commit或者apply提交修改到内存和文件。当然有了两种都可以提交的方法,肯定要区别一下的。commit这种方式很常用,在比较早的SDK版本中就有了,这种提交修改的方式是同步的,会...原创 2020-04-28 10:38:05 · 515 阅读 · 0 评论 -
Mmkv——存取速度比SharedPreferences快数十倍的本地缓存工具
MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。MMKV 原理内存准备通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。数据组织数据序列化方面我们选用 protobuf 协议,pb 在性能和...原创 2020-03-19 18:47:14 · 1878 阅读 · 0 评论 -
IO流操作
对象序列化对(将内容存入磁盘)ObjectOutputStream input = new ObjectOutputStream(new FileOutputStream(new File("D:" + File.separator + "text.txt"),true));Person per = new Person("优快云", 28); input.writeObject(per)...原创 2020-02-14 12:51:55 · 158 阅读 · 0 评论 -
Android——Activity中的isTaskRoot()方法作用
我们先打开一个App,然后升级完成后(或者是在开发过程中先运行App,然后再安装完成一个app时)。在安装界面直接点击打开。我们进入了app的首页,这时我们按home键返回桌面,再点击应用图标,会发现没有直接进入首页,而是先进入了app的闪屏页,在进入首页。这是因为应用安装完成后打开应用出现初始化两次。但是如果一开始安装完我们不是直接打开,而是在桌面点击应用进入就不会这样了。解决方案:在启动A...原创 2020-01-30 20:31:04 · 1612 阅读 · 0 评论 -
JSONObject的get()、getString()、opt()、optString()四者的区别
要分析三者的区别,首先我们要知道他们内部的实现原理,所以我们先看他们的源码实现:getString(String key)方法的源码如下:public String getString(String name) throws JSONException { Object object = get(name); String result = JSON.toString(obje...原创 2019-11-09 10:48:15 · 7785 阅读 · 0 评论 -
零碎杂记手札
网络请求中,如果我们请求的是一张图片,我们应该用byte[]bytes = response.body.bytes()来接收,然后将这个byte数组转化为Bitmap位图来显示。如果我们请求到的是其他的文件,如doc文档,txt文本,MP4多媒体,apk应用,那我们应该用InputStream input = response.body.byteStream()来接收,然后通过I/O流及序列化操...原创 2019-10-12 23:10:55 · 155 阅读 · 0 评论 -
GreenDao数据库学习小结
本文参考了阿呆的GreenDao3.2的简单使用一文: https://www.cnblogs.com/wjtaigwh/p/6394288.html 这段时间准备一直在准备一些老项目的重构需要用到的技术点,其中一项技术要掉便是数据库的使用,查阅了相关资料,熟悉了GreenDao数据的使用要点,现在简单的说说:1、GreenDao的有点比如响应速度快、依赖包小等在此不多说,听说过这套数据库方案的伙伴原创 2017-12-04 12:46:12 · 645 阅读 · 0 评论 -
使用NestedScrollView代替ScrollView解决滑动冲突
想必大家遇到过在同一个界面中,要展示的内容非常多,完全展示出来高度远超过屏幕高度,这时候通常的做法是布局中使用ScrollView进行嵌套,但如果遇到ScrollView嵌套中包含一个或者多个RecyclerView列表的话,还得自定义RecyclerView以解决滑动冲突。那么今天我们这里有一个现成的控件NestedScrollView,用他替代ScrollView,并且不用自定义Recycle...原创 2018-02-23 15:08:35 · 55284 阅读 · 31 评论 -
APP崩溃Crash时的异常捕捉
Android应用无论你写得多完美,总是无法避免因未知的问题而Crash,可能是由于Android系统的低层Bug,也可能是由于不够充分的机型适配或者网络处理。往Crash发生的时候,系统会kill调正在执行的程序,出现闪退或者提示用户程序已经停止运行,这对用户来说是很糟糕的体验。对开发者来说也是一头雾水,因为开发者完全不知道是何原因造成应用Crash的,想解决这个Bug而无从下手。其实Andro...原创 2018-03-04 22:51:41 · 926 阅读 · 0 评论 -
Android 关于状态栏的那些事儿
项目开发中,关于Bar 这块儿,经常会出现一些古古怪怪的需求,因此本文在此对Bar的一些常见需求,做一个总结。需求一、全屏,StatusBar和TitleBar都不保留。 这个需求有一下三种方案来解决:1、通过Java代码动态解决,在Activity的OnCreate()方法setContentView(R.layout.activity_status_bar)代码之后添加以下代码:...原创 2018-03-12 19:50:44 · 222 阅读 · 0 评论 -
Drawable总结
一、Drawable简介 它是一个抽象类,分很多种,但都表示一种图形图像的概念,他有很多的子类,如shapeDrawable、bitmapDrawable等,因此它不是简单的图片,可以构造各种各样的图形效果。既可以通过xml来定义,也可以通过代码来动态定义。 Drawable有两个重要的参数:内部宽/高,可以通过getIntrinsicWidth/ getIntrinsicHe...原创 2018-04-30 15:36:24 · 328 阅读 · 0 评论 -
合理使用Context,有效避免内存泄漏
public class CustomManager { private static CustomManager sInstance; private Context mContext; private CustomManager(Context context) { this.mContext = context; } public ...原创 2018-04-30 15:41:43 · 584 阅读 · 0 评论 -
RecyclerView和ListView的对比分析
1、布局效果对比: Android 默认提供的 RecyclerView 就能支持 线性布局、网格布局、瀑布流布局 三种(这里我们暂且不提代码细节,后文再说),而且同时还能够控制横向还是纵向滚动。2、API 使用对比: ListView 的基础使用大家再熟悉不过,其使用的关键点主要如下:A、继承重写 BaseAdapter 类;B、自定义 ViewHolder 和 convertVi...原创 2018-04-30 15:56:21 · 459 阅读 · 0 评论 -
关于悬浮球(悬浮窗)Android8.0(Android O)的适配
最近项目新需求要用到悬浮球技术,因以前的工作项目中就用到了这个技术,因此看到这个需求时心里是愉悦的,心念着照搬过来即可。开发中也确实如此,直接搬过来,然后测试了三星C5,小米Note4以及OPPO手机,运行顺畅,均无异常。当测试到华为Honor8青春版时,就GG了。抛出了以下异常:java.lang.RuntimeException: Unable to create service com....原创 2018-08-15 10:29:03 · 4125 阅读 · 5 评论 -
PopupWindow阻塞和AlertDialog非阻塞的区别
通常我们理解的阻塞,是阻塞了某个线程,即代码执行到这里后等待这个函数块执行完毕,才能继续向下运行。比如常见的控制台输入函数,必须要求用户输入一个值才能继续,否则等待。在Android里,一部分人对阻塞做了另外的解释:锁死了其它UI,只有当前这个模块可以被响应。具体什么意思呢?比如原本点击屏幕,会弹出一个Toast。那么好,现在我弹出一个UI,用户只能在这个UI操作,他再去点击这个UI外围的屏幕,...原创 2018-10-08 10:57:38 · 1181 阅读 · 3 评论 -
关于onBackPressed方法和onKeyDown方法
关于onBackPressed方法和onKeyDown方法Android开发中,我们同时复写onBackPressed方法和onKeyDown方法,若果不加注意,有可能实现不了我们预期的目的,具体如下:@Overridepublic void onBackPressed() { Log.i(TAG, "onBackPressed: "); //TODO:}@Overri...原创 2019-05-12 13:04:11 · 8952 阅读 · 0 评论 -
循环遍历输出map元素对象
Android开发中常用的数据模型多为List,但偶尔也会有Map的形式,返回key和value。获取map的key和value有以下几种方式:Map<String,Object> map = new HashMap<String,Object>(); map.put("accident", "意外险"); map.put("properties", "财...原创 2019-10-07 00:46:10 · 1292 阅读 · 0 评论 -
Flutter踩坑笔记一——环境搭建的坑
Flutter的环境搭建其实还是很简单的:当你把AndroidStudio升级安装3.5版本的时候,他已经默认为你安装了Dart和Flutter插件,可见公里对flutter的重视,所以也省了我们不少事儿。首先,打开 官方文档 获取 Flutter SDK点击下图中红圈圈所示的位置下载SDK文件下载完成后,解压,然后将其中bin文件夹路径配置到用户环境变量中的path参数里面去:...原创 2019-10-07 12:47:35 · 269 阅读 · 0 评论 -
AndroidX下的两个坑
一、butterknife等依赖引发的坑:The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation ...原创 2019-10-10 15:53:12 · 6566 阅读 · 3 评论 -
Android开发的性能优化
Android性能优化主要内容包括布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView/RecyclerView优化、Bitmap优化、线程优化以及代码性能优化,此处会一一讲解,并给出一些优化建议。一、布局优化 优化思路很明确,就是尽可能的减少布局文件的中间层级,原因很简单,中间层级减少了,Android的View在measure、layout和draw上面耗费的时间就减...原创 2017-11-15 16:44:20 · 386 阅读 · 1 评论