android
文章平均质量分 90
qijingwang
初心易得,始终难守
展开
-
RecyclerView局部刷新机制
之前在使用RecyclerView的遇到过一个问题,使用notifyItemChanged刷新数据的时候会出现重影或者闪烁的现象。这个问题很容易出现,当我们的列表中有进度显示(比如下载),这时候需要不停的更新进度,就需要使用notifyItemChanged使用notifyItemChanged可以只刷新那一个item,这样就避免了像ListView那样全部刷新但是如果使用notifyItemChanged(position),在滑动的时候刷新就会出现重影或者闪烁的问题。解决这个问题很简单,原创 2022-02-08 11:51:24 · 3285 阅读 · 0 评论 -
Android MediaPlayer生命周期分析
摘要:MediaPlayer是Android平台用于播放音频/视频/流媒体的类。它是基于状态的。也就是说,MediaPlayer有一个内部的状态,某些方法仅适用当Mediaplayer在某些状态,即player在特定状态。那么MediaPlayer到底是怎样的生命周期呢?每种状态又该注意哪些问题呢?MediaPlayer类可以用来播放音频、视频和流媒体。MediaPlayer包含了Au...原创 2020-03-19 18:19:56 · 367 阅读 · 0 评论 -
onFinishInflate方法在哪里调用的?
onFinishInflate 在XML解析完毕后调用. 而setContentView(R.layout.activity_main)方法对xml进行解析和添加.setContentView最终会调用LayoutInflater的inflate方法. public View inflate(@LayoutRes int resource, @Nullable ViewGroup ro...原创 2020-03-18 16:38:53 · 259 阅读 · 0 评论 -
Android 截长图
原理:Android 为了提高滚动等各方面的绘制速度,可以为每一个 View 建立一个缓存,使用 View.buildDrawingCache 为自己的 View 建立相应的缓存, 这个 cache 就是一个 bitmap 对象。利用这个功能可以对整个屏幕视图进行截屏并生成 Bitmap ,也可以获得指定的 View 的 Bitmap 对象。WebView 和其他 View 一样,系统都提供了...原创 2020-03-13 22:36:02 · 352 阅读 · 0 评论 -
Activity的管理机制
AMS提供了一个ArrayList mHistory来管理所有的activity,activity在AMS中的形式是ActivityRecord,task在AMS中的形式为TaskRecord,进程在AMS中的管理形式为ProcessRecord。如下图所示从图中我们可以看出如下几点规则: 所有的ActivityRecord会被存储在mHistory管理; 每个Activi...原创 2020-03-12 15:21:18 · 464 阅读 · 0 评论 -
Android 中的 @hide
对于@hide最简单的比喻就是将 Android SDK 想象成一座冰山,在文档中的只是你能看到的部分。Android SDK 中的类(Activity, AsyncTask, AlarmManager...)都是普通的 Java 类。因此,就可见性而言,它们受到的约束和其他 Java 类是一样的:public:也就是我们在文档中能看到的大部分内容。 private 'packag...原创 2020-03-11 12:06:27 · 1792 阅读 · 0 评论 -
Android WebView清空缓存
Android原生和H5混合开发,要求用户退出登录后清空H5所有的缓存;1、清空Cookie CookieSyncManager.createInstance(context.getApplicationContext()); CookieManager cookieManager = CookieManager.getInstance(); ...原创 2019-12-26 17:50:06 · 797 阅读 · 0 评论 -
Android IdleHandler 原理浅析
问:什么是 IdleHandler?有什么用?怎么用?答:IdleHandler 可以用来提升性能,主要用在我们希望能够在当前线程消息队列空闲时做些事情(譬如 UI 线程在显示完成后,如果线程空闲我们就可以提前准备其他内容)的情况下,不过最好不要做耗时操作。具体用法如下。//getMainLooper().myQueue()或者Looper.myQueue()Looper.myQ...原创 2019-12-12 19:00:26 · 368 阅读 · 0 评论 -
Android调用Camera API 拍照导致图片变形
由于基本上所有android手机支持的图片比例为4:3和16:9,有时候自定义的SurfaceView大小不满足这两种比例则会出现变形。另外的情况是由于默认的PreviewSize和我们View的比例不一样也会同样导致变形;解决办法就是从params.getSupportedPreviewSizes()里面选取适合的比例然后params.setPreviewSize(),此时设置的只是预览的大...原创 2019-12-02 19:51:01 · 512 阅读 · 0 评论 -
The specified child already has a parent. You must call removeView() on the child's parent first.
先从一段异常开始吧,这是在Activity中把布局上的一个TextView添加到另一个布局的时候抛出的一段异常:Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.代...原创 2019-11-27 17:11:56 · 1024 阅读 · 0 评论 -
android 中断点续传理解
断点续传用到的知识点:1.http返回的code码不为200,可能为2062.使用RandomAccessFile设定文件大小并于指定位置开始读数据[randomAccessFile.seek(position)]。3.请求资源链接时指定所请求数据的返回范围。 httpURLConnection.setRequestProperty("Range", "bytes=" ...原创 2019-11-26 17:23:13 · 178 阅读 · 0 评论 -
新建android项目报错,Rejecting re-init on previously-failed...
错误提示03-20 14:54:57.718 7909-7909/? I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.N...原创 2019-11-23 11:15:30 · 2454 阅读 · 0 评论 -
如何判断Activity是否在运行?
如下这场景我相信很多人都遇到过,这段话也是从某个帖子截取出来的:从Activity A 启动一个线程去进行网络上传操作,在A中设立一个回调函数,当上传操作完成以后,在A的这个回调函数中会弹出一个对话框,用来显示回调信息。可是当上传的过程还在进行的时候,我按下back键,A的activity 被销毁了,可是那个上传的线程还在进行,当那个线程结束后,本来应该在A中弹出一个对话框,可是由于A已经不...原创 2019-11-22 14:24:18 · 2669 阅读 · 0 评论 -
StatusBar 设置
随着Android版本的迭代,开发者对状态栏等控件有了更多的控制, google 一直在尝试引入新的Api来满足开发者的需求,但Api却一直不够完美,接口添加了很多,却都不够简单或者说完美,算上第三方厂商的特色行为,怎一个“乱”字了得。1. 效果当前主流 Android app StatusBar 效果有以下几种:简单分个类:Material Design 风格,状态栏颜色比 toolb...原创 2019-11-14 13:11:42 · 381 阅读 · 0 评论 -
第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
前言前些天,测试MM发现了一个比较奇怪的bug。具体表现是:1、将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 【闪屏页Activity】, 然后跳转 【主页Activity】)2、然后MM在 【主页Activity】 时按下了 【Home键】,回到桌面3、再点击app的icon图标,原谅耿直的我们都是觉得应该直接回到【主页Acti...原创 2019-11-13 21:33:09 · 229 阅读 · 0 评论 -
No IDEA annotations attached to the JDK 1.8
问题背景今天上午打开AS后突然发现所有xml界面无法预览,打开class文件也发现从头到尾全是错误,在class文件界面上方提示No IDEA annotations attached to the JDK 1.8 (C:\Program Files\Android\Android Studio\jre)…头一次遇见这个问题,只好百度,最后在stackoverflow找到一个解决方案,试了一试...原创 2019-11-13 13:19:16 · 699 阅读 · 0 评论 -
Bitmap 硬盘上的存储格式与在内存的展开格式区别
知识普及系列:图片有两种使用的场景:一种是在硬盘上的存储格式,一个是在内存的展开格式。一、在内存中的图片 因为需要知道图片的所有信息,所有在内存中,图片一般是展开的。那以带透明的Bitmap来说。这里有一些概念。1.像素点组成:颜色有R(red红色)、G (green绿色)、B (Blue蓝色) 三色组成,再考虑到透明值的问题会有一个A(alpha阿尔法值)。2.位深度:你需要用多少B...原创 2019-11-05 18:18:25 · 515 阅读 · 0 评论 -
Android控件WebView实现完整截图
//android 5.0 之后需要开启浏览器的整体缓存才能截取整个Webif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { WebView.enableSlowWholeDocumentDraw();}首先需要在WebView初始化之前(一般就是setContentView()方法调用之前)调用WebView...原创 2019-10-30 19:14:45 · 662 阅读 · 0 评论 -
Android WebView加载网页失败异常处理
开发过程中会遇到WebView加载失败的时候,会出现404、500、找不到网页等错误,页面显示系统默认的错误界面。系统默认界面难看,而且也会暴露网页地址不安全。所以我们需要对WebView加载失败或错误进行处理,自定义一个统一样式来加载失败的界面。网页加载失败图解决方案我们可以自定义一个View用来展示加载失败的界面,也可以写一个错误展示的 Html让 WebView加载等。这里我...原创 2019-12-31 14:21:36 · 12647 阅读 · 1 评论 -
WebView WebViewClient onReceivedHttpError() return 404 ?
为什么返回404?当我们使用WebView加载一个html页面时,通常会在WebViewClient 的onReceivedHttpError()与onReceivedError()去做一些错误响应的处理,但是有时候虽然页面加载成功,onReceivedHttpError()这个方法却会返回404,为什么会返回404呢?WevView是Android系统内置的一个浏览器,同别的浏览器一样,We...原创 2019-10-30 19:07:00 · 1701 阅读 · 0 评论 -
Android 中的 Enum 到底占多少内存?该如何用?
听说过一些论调,Enum 不该用啊,占用了很大的 dex 文件,占用很多内存。而到底确切占用了多少内存,没说。本文分析了枚举所占用的精确的内存大小,方便大家权衡选择,希望对大家有帮助。关于 Enum 的使用Enum 需要占用较大的内存,如果对内存敏感,请尽量少使用 Enum,换用做静态常量。文档 提到:Enums often require more than twice as mu...原创 2019-10-29 11:04:38 · 363 阅读 · 0 评论 -
Android 接入支付宝在手机未安装支付宝客户端的情况下掉不起支付宝sdk的h5页面
Android 接入支付宝在手机未安装支付宝客户端的情况下掉不起支付宝sdk的h5页面最近公司项目需要对接支付宝移动支付,按照支付宝开发文档一步步往项目中集成,一开始还是比较顺利的,因为测试手机上安装了支付宝客户端,当我把支付宝卸载后,问题出现了,因为支付宝sdk本身就进行了客户端是否安装的判断,安装了会呼起支付宝客户端,未安装会调用内置的H5支付界面。现在H5界面无法呼起了!!!然后一步步核...原创 2019-10-25 11:18:13 · 2352 阅读 · 5 评论 -
WebView监听网页加载成功与失败
方法一:利用原生回调方法private boolean isSuccess = false;private boolean isError = false;public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (!isError) { ...原创 2019-10-24 15:53:28 · 2277 阅读 · 0 评论 -
compileSdkVersion、minSdkVersion、targetSdkVersion
一、前言在新建一个 Android Project 的时候,都是需要选择当前创建的 App 支持的版本的。而这些配置,就反应在 compileSdkVersion、minSdkVersion、targetSdkVersion 三个属性的配置上。它们分别代表的含义,就是本片文章的内容。二、这些 SdkVersion首先思考一下,这些 XxxSdkVersion 为什么而存在呢?在...原创 2019-10-17 16:03:17 · 173 阅读 · 0 评论 -
Android 系统各个版本上https的抓包
一、本文侧重点在哪?https 的客户端和服务器端的请求流程,加了Charles之后对请求有什么影响(中间人攻击) 我们原来怎么抓https包的 Android 7.0 (api 24 ) 和 targetSdkVersion 对抓包的影响 开发者对自己app的抓包, 逆向工程师对别人app的抓包 有 CA 签名的证书访问https的app和自签名证书app 微博和我们自己的app...原创 2019-08-12 18:26:14 · 1871 阅读 · 1 评论 -
gradle compileOnly的使用场景
Android studio升级到3.0之后,依赖方式也有了更新。这是2.x图片.png 来源网络这是3.0图片.png 来源网络其中2.x版本的 Provided 变成了 compileOnly这个命令的意思是只在编译时有效,不会参与打包举个例子:新建一个工程,同时新建一个library图片.pngtestlibrary的gra...原创 2019-09-27 13:05:55 · 13352 阅读 · 0 评论 -
Android应用程序文件存储路径
// 获得缓存文件路径,磁盘空间不足或清除缓存时数据会被删掉,一般存放一些临时文件 // /data/data/<application package>/cache目录 File cacheDir = getCacheDir(); Log.d("TAG", "getCacheDir() : " + cacheDir.getAbsolutePath()); //...原创 2019-02-27 19:09:17 · 2269 阅读 · 0 评论 -
屏幕适配方案
使用直接在Application的onCreate方法中调用(Density类直接参照附录)Density.setDensity(this, 375f);这个地方我们需要注意375f这个参数,针对这个参数,我们来好好说说。375这个值是一个UI图的参照值,单位是dp,我参照的是1334*750像素的图然后我们来看下px与dp的转换图Android 单位:dp...原创 2018-07-27 14:38:36 · 174 阅读 · 0 评论 -
图解HTTPS协议
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS简介HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。...原创 2019-08-12 11:09:04 · 110 阅读 · 0 评论 -
Android Gradle排除依赖模块的某个类
Gradle怎么排除所依赖的模块的某各类其实我觉得在很多的情况下都会碰到这个问题,比如你的老大写了个BaseModule,里面有很多东西,你就没必要造轮子了,但是其实你这个项目中用不到这么多,那就没必要在打包的时候也把多余的代码打进去,但是你又不能删掉,因为很多个模块都依赖这个Base模块,所以你只能用“排除”的方法来去掉多余的代码。再比如你自己的模块和所依赖的模块有同名类,包名都相同的那种,...原创 2019-08-20 17:58:23 · 15365 阅读 · 3 评论 -
ViewPager设置wrap_content无效
问题描述最近开发中ViewPager设置高度为wrap_content,然后在ItemView中固定高度,发现ViewPager并不能自适应调整高度,总是会占满可以用的布局,效果和match_parent一样问题分析于是看了一下ViewPager的源码,尺寸问题一般是在onMeasure时确定的,定位到ViewPager的onMeasure中查看:@Overrideprot...原创 2019-07-12 11:04:30 · 585 阅读 · 2 评论 -
Android 资源文件屏幕适配
一、图片适配:mipmap-xhdpi:720P,表示1280x720分辨率,用于存放2x切图mipmap-xxhdpi:1080P,表示1920x1080分辨率,用于存放3x切图mipmap-xxxhdpi:2K,表示2560x1440分辨率,用于存放4x切图 二、布局适配:1、layout目录方式:res/layout目录后跟分辨率,格式:"layout-高x宽",每...原创 2018-09-26 20:36:14 · 1300 阅读 · 0 评论 -
Android View的onFinishInflate和onSizeChanged生命周期详解
1、onFinishInflate从字面上来看这个方法的作用就是在完成View的布局实例化后的回调,关于布局实例化的内容(LayoutInflater)的学习网址:LayoutInflater原理,通过对这篇博客的学习可以得知:这个回调方法是在整个布局文件都实例化结束后每个View才进行回调,或者说是在控件及其子控件都实例化结束后每个View才进行的回调。ps:这个回调是发生在视图实例...原创 2018-09-25 21:54:55 · 759 阅读 · 0 评论 -
记录面试中的一道大意的题
链接:https://www.nowcoder.com/questionTerminal/ee6c0d0f043246bdb49d0b58d3aa7d15来源:牛客网 阅读代码回答运行结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...原创 2018-09-13 02:22:19 · 158 阅读 · 0 评论 -
关于startActivityForResult()方法,如果是A跳转B,B的launchMode属性为singleInstance,A的onActivityResult()回调方法会在什么时候调用呢
如题:关于startActivityForResult()方法,如果是A跳转B,B的launchMode属性为singleInstance,A的onActivityResult()回调方法会在什么时候调用呢?A.B被启动的时候即调用B.B返回的时候调用C.下一次A启动的时候调用D.不会被调用这道题的争议在于A和B选项,下面笔者分别对5.0之前和之后进行测试:测试准备,Andr...原创 2018-09-13 01:20:40 · 817 阅读 · 0 评论 -
RecyclerView滑动到指定位置,并指定位置在顶部
一般我们用 mRecycleview.smoothScrollToPosition(0)滑动到顶部,具有滚动效果,但是如果我们想滚动到任意指定位置,那么smoothScrollToPosition()就不能保证所指定item位于屏幕顶部,那么一下提供下我解决的方法:1.第一种方法此方法能实现指定位置位于屏幕顶部,但是不具有平滑滚动视觉效果: if (position != -1) {...原创 2018-04-17 14:04:38 · 1706 阅读 · 0 评论 -
Android开发细节
Android开发中有一些小的知识点,了解了不仅能能够避免很多坑,同时也能够简化开发过程,提高代码的健壮性。分割线分割线是Android开发中一个常用的UI元素,我们可通过定义一个View,并设置背景来实现,但其实AbsListView和LinearLayout都提供了分割线的功能:AbsListViewAbsListView通过divider和dividerHeight来控制分割线的样式,通常情...原创 2018-07-06 10:40:15 · 290 阅读 · 0 评论 -
Android 混淆
毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。首先,这里说的的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。依靠 ProGuard,混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的瓶颈;同时,将类、类成员、方法重命名为无意义的简短名称,增加了逆向工程的难度。而依靠 Gradle 的 And...原创 2018-07-02 13:36:05 · 167 阅读 · 0 评论 -
关于so文件你需要知道的知识
1. 什么是CPU架构及ABIAndroid系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在...原创 2018-06-29 13:53:41 · 8811 阅读 · 1 评论 -
解决Android7.x找不到libsqlite.so 问题
解决Android7.x找不到libsqlite.so 问题TargetSdkVersion 为24时,找不到libsqlite.so,导致App直接崩溃。原因:一般某些聊天的SDK都依赖于libsqlite.so(环信、融云),不过由于这个包从来没有变化,使用的是系统默认提供的(/system/lib/)。在Android 6.x及以下的平台可以运行。 Android7.x执行更严格的安全检查,...原创 2018-06-29 13:26:10 · 342 阅读 · 0 评论