![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android应用层
文章平均质量分 75
AnjoyZhang
这个作者很懒,什么都没留下…
展开
-
Android 小米深色模式对View进行适配
问题概述:问题来源于测试提了一个bug,在小米手机上图片直接消失了。原因:造成这个问题的原因在于,小米手机深色模式下会为所有的应用默认开启深色模式,可在设置中主动关闭。哪怕应用没有主动适配,小米也会为应用开启深色模式。其他厂商暂未发现此问题。问题再探究竟:小米手机为开启深色模式的应用开启颜色反转,黑色变成白色,白色变成黑色。正常情况下,应用是可以正常反转使用的。但是如果应用如果使用了shape下的solid属性。就会造成solid反转失效。这也是造成我们应用图片不显示的根本原因。由于solid反转原创 2020-11-30 16:38:29 · 2908 阅读 · 0 评论 -
Android中使用Handler造成内存泄露的分析和解决
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。...转载 2018-03-28 11:53:26 · 424 阅读 · 0 评论 -
Android 服务之IntentService 详解
1. IntentService 概述2.IntentService如何使用3. IntentService源码解析1. IntentService 概述IntentService继承自Service,所以,我们可以用来执行后台耗时任务。那为什么又要封装一个这样的IntentService呢?下面我们来看看IntentService有什么特点。它本质是一种特殊的S...原创 2018-03-22 16:26:57 · 978 阅读 · 0 评论 -
Java 线程池详解
什么是线程池 为什么要使用线程池 线程池的处理逻辑 如何使用线程池 如何合理配置线程池的大小 1.什么是线程池 线程池,顾名思义就是装线程的池子。其用途是为了帮我们重复管理线程,避免创建大量的线程增加开销,提高响应速度。2.为什么要用线程池作为一个严谨的攻城狮,不会希望别人看到我们的代码就开始吐槽,new Thread().start()会让代码看起来...转载 2018-02-08 16:30:41 · 343 阅读 · 0 评论 -
Android 进阶(三)--Android事件分发机制
1.前言Android事件分发机制在Android开发者必须要了解的知识,并且是解决View的滑动冲突的基础。2.事件分发的基础要想了解事件分发的机制,我们必须要知道事件分发的基础,即,事件分发的对象和流程。2.1 事件分发的定义将点击事件(MotionEvent)向某个View进行传递并最终得到处理。2.2 事件分发的对象当用户触摸屏幕时(View或Vie...原创 2017-11-28 16:01:05 · 691 阅读 · 0 评论 -
Android消息机制--Handler 深入解析(JAVA层)
1. Android 消息机制概述阅读本文之前,你需要知道以下几点:1.Handler的使用必须依赖于一个Looper对象2.线程是默认没有Looper的,但是UI线程有一个Looper对象;3.在启动APP的时候,UI线程Looper会初始化完毕,所以可以得出,UI线程可以直接使用Handler。1.1Android消息机制是什么? Android消息机制 主要指原创 2018-01-10 21:47:44 · 724 阅读 · 0 评论 -
Android 读取文件的正确打开方式
1.Java 读取操作基本知识 图片来自: 2017java文件操作(读写操作)从上图可以开出,java的读写操作(输入输出)可以用“流”这个概念来表示,总体而言,java的读写操作又分为两种:字符流和字节流。1.1 流相关知识流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也原创 2018-01-31 17:33:58 · 3349 阅读 · 0 评论 -
Android进阶(二)--序列化Serializable和Parcelabel使用与区别
1.序列化1.1 序列化的定义 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。简单地说,“序列化”就是将运行时的对象状态转换成二进制,然后保存到流、内存或者通过网络传输给其他端。1.2 序列化的使用场景我们...原创 2017-11-16 16:53:10 · 1204 阅读 · 2 评论 -
Android 微信支付详解与Demo
最近公司弄Ionic框架,项目中需要微信支付,无奈,把我调过去弄,期间也是几近崩溃,好在皇天不负有心人,在看别人的文档,终于是在项目中集成了微信支付,下面作为一个小白的我,想要把我的经验分享给大家,希望对大家有所帮助。 先给一个可用的demo吧(运行前先看txt文件) http://download.csdn.net/detail/simon_crystin/9699743;1.去微信开放平台申原创 2016-12-02 12:45:28 · 19153 阅读 · 74 评论 -
Android开发进阶(一) Intent与IntentFilter
1.前言在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度。Intent是信息的载体,用它可以去请求组件做相应的操作,但是相对于这个功能,Intent本身的结构更值得我们去研究。读完本篇你将会了解:1.Intent的显示调用与隐式调用 2.隐式调用的匹配规则(重点) 3.隐式调用的使用场景 4.隐式调用的...原创 2017-11-14 14:53:59 · 1935 阅读 · 2 评论 -
自定义控件 | 仿《最美有物》点赞效果
前言最近在跟着Hencode学习自定义控件,一直想着自己能够照着别人写的demo写一个好看的View,就科学上网看看了别人的一些demo,看到了一位大神写的模仿《最美有物》的点赞效果,觉得胜似喜欢,于是也跟着写了一个demo。主要是看着流程分析自己撸出来的,之前用了自己的写法,然后看到了大神demo有更好的解决方案,后面也改过来了,所以在代码实现方式都差不多。效果图动画分析1.向上拉伸是一个属性动画原创 2017-10-24 17:52:30 · 1263 阅读 · 1 评论 -
简单封装弧形广告轮播图(ViewPager+贝塞尔曲线)
前言通过ViewPager和贝塞尔曲线实现了一个弧形广告轮播图。效果图实现方法想要实现这个效果,现在几行代码就可以了:Step 1. Add it in your root build.gradle at the end of repositories:allprojects { repositories { ... maven { u原创 2017-11-09 10:29:34 · 4041 阅读 · 0 评论 -
Android 点击WebView图片预览图片
1. 概述2.流程分析3.代码实现3.1 添加权限:3.2 添加依赖:3.3 代码实现:1. 概述在实际开发中,我们可能会遇到用webview去展示一篇文章或者其他内容,然后我们需要点击里面的图片能够展示出来,这就是我们今天的重点–点击webview的图片进行展示。先看一个效果图。 2.流程分析1.用webview加载文章; 2.点击图片某个...原创 2018-07-02 14:06:19 · 2730 阅读 · 1 评论 -
Android PtrFrameLayout 与RecyclerView滑动冲突解决方法
1.背景2.主要代码逻辑2.1 父View代码(PtrFrameLayout)2.2 子View关键代码(RecyclerView)3.完整代码3.1 父View完整代码1.背景如果你也是用的PtrFrameLayout 下拉刷新框架和RecyclerView 出现了冲突,可以参考一下。在开发中,一个水平布局的RecyclerView出现了与PtrFr...原创 2018-07-05 14:40:58 · 1918 阅读 · 3 评论 -
Android WebView开发(二)--WebSettings使用详解
1.前言2.WebSettings 介绍3.WebSettings方法介绍1.前言在上一篇文章我们介绍WebView的使用介绍,主要是讲解了WebView的使用基础。这一篇就是介绍WebSettings的使用详解了。 WebSettings 就是一个管理WebView 状态的类。2.WebSettings 介绍 Manages settings sta...原创 2018-08-31 13:57:06 · 3694 阅读 · 0 评论 -
Kotlin实战--给别人的类添加方法:扩展函数和属性
1.概述扩展函数能够让我们与项目无缝接入,我们能够在无侵入的情况下为类添加更多的行为和属性,Kotlin库中很多地方就用到了扩展函数,如Anko库里面的布局系统,集合的使用等。正是由于扩展函数的使用,才可以让我们与JAVA无缝衔接。并且扩展函数的使用非常的简单,下面我将从下面几个方面介绍扩展函数。为什么要使用Kotlin中的扩展函数?如何使用扩展函数和扩展属性?扩展函数和属性原理扩展函...原创 2019-05-17 15:45:44 · 1887 阅读 · 0 评论 -
Kotlin实战--消除静态工具类:顶层函数和属性
1.引入我们都知道, Java 作为 门面向对象的语言,需要所有的代码都写作类的函数大多数情况下,这种方式还能行得通。但事实上,几乎所有的大型项目,最终都有很多的代码并不能归属到任何 个类中。有时 个操作对应两个不同的类的对象,而且重要性相差无几。有时存在 个基本的对象,但你不想通过实例函数来添加操作,让它的 API 继续膨胀。结果就是,最终这些类将不包含任何的状态或者实例函数,而是仅仅作为一堆...原创 2019-05-16 16:55:59 · 494 阅读 · 0 评论 -
用Kotlin的Anko库优雅开发Android应用--Anko库详细教程
前言最近Kotlin的呼声又是日益高涨,前几天9012年Google IO正式将Kotlin从first _class提升为kotlin_first。我也是接触了一段时间的Kotlin,给我的感觉就是简约,快速。无需繁琐的findId,高阶函数的应用,再加上Kotlin的null 安全,更是将代码的崩溃率降到更低。今天我们就来介绍一下今天的主角—Anko1.AnkoAnko是JetBrai...原创 2019-05-14 14:42:13 · 2486 阅读 · 0 评论 -
Android 性能优化--内存优化之Bitmap优化
Android开发中,Bitmap是经常会遇到的对象,特别是在列表图片展示、大图显示等界面。而Bitmap实实在在是内存使用的“大客户”。如何更好的使用Bitmap,减少其对App内存的使用,是Android优化方面不可回避的问题。因此,本文从常规的Bitmap使用,到Bitmap内存计算进行了介绍,最后分析了Bitmap的源码和其内存模型在不同版本上的变化。Bitmap的使用一般来说,一个对...转载 2019-04-25 18:01:49 · 912 阅读 · 0 评论 -
Android性能优化 View--布局优化
目录1.影响的性能布局性能的好坏 主要影响 :Android应用中的页面显示速度2.如何影响性能布局影响Android性能的实质:页面的测量 & 绘制时间1个页面通过递归 完成测量 & 绘制过程 = measure、layout 过程3.优化思路优化方向:布局性能、布局层级、布局复用性 和 测量 & 绘制时间具体如下针对 页面布局的性能、层级、...转载 2019-04-24 18:10:40 · 298 阅读 · 0 评论 -
Android性能优化 View--绘制优化
目录1.影响的性能绘制性能的好坏 主要影响 :Android应用中的页面显示速度2.如何影响性能绘制影响Android性能的实质:页面的绘制时间1个页面通过递归 完成测量 & 绘制过程3.优化思路主要优化方向是:降低View.onDraw()的复杂度避免过度绘制(Overdraw)3.具体优化方案下面,我将详细分析每种优化方案4.1. 降低View.on...转载 2019-04-24 17:50:56 · 1410 阅读 · 0 评论 -
磁盘I/O那些事
概述计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计...转载 2019-04-16 15:40:32 · 659 阅读 · 0 评论 -
Android Retrofit统一处理 token失效跳转到登录页面
文章目录1.问题引入2.解决方案1.问题引入在客户端开发中,我们可能会遇到token失效问题,这个时候我们可以刷新token或者跳转到登录页面,这里我们就给出如何统一处理token失效问题,基于Retrofit。2.解决方案在BaseFilterObserver(implements Observer)中重写onNext方法 public void onNext(@NonNull Res...原创 2019-04-16 11:56:19 · 7022 阅读 · 1 评论 -
Android P(9.0) http网络请求的问题(Cleartext HTTP traffic to **** not permitted)
1.前言Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P)的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport LayerSecurity)传输层安全协议,而 Andr...原创 2019-03-15 14:45:15 · 1368 阅读 · 0 评论 -
Cookie、Session、Token那点事儿
1.什么是Cookie?2.Session :3.Token :4.Cookie和Session的区别:6.Token 和 Session 的区别:1.什么是Cookie?Cookie 技术产生源于 HTTP 协议在互联网上的急速发展。随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服务器保持活动状态(简称:保活)。于是,在浏览...转载 2018-09-06 10:47:22 · 356 阅读 · 0 评论 -
Android WebView开发(一)--WebView的使用介绍
1.前言2. Android WebView 简介3. 简单使用3.1、添加网络权限4.WebView的状态5. 关于前进 / 后退网页6. 清除缓存数据1.前言目前很多公司的 App 就只使用一个 WebView 作为整体框架, App 中的所有内容全部使用 HTML5 进行展示,这样只需要写一次 HTML5 代码,就可以在 Android 和 iOS 平...原创 2018-08-29 15:48:49 · 1118 阅读 · 0 评论 -
Android WebView开发(三)--WebViewClient 与WebChromeClient的使用
1.前言2.WebViewClient类2.1 WebViewClient作用:2.2 WebViewClient 常用方法 :2.2.1 shouldOverrideUrlLoading()方法3.WebChromeClient类3.1 WebChromeClient 作用:3.2 WebChromeClient 常用方法:1.前言前两篇我们讲解了 And...原创 2018-08-31 17:29:42 · 2641 阅读 · 0 评论 -
Android自定义数字键盘(支持随机数字)
前言也是最近想写个demo玩玩,不知道写哪个方面的好,就随便写了一个自定义的键盘,比较简单,但是做了封装,支持jitpack库依赖(这也是我一次开源自己的库,比较水的一个开源项目,仅供学习使用)。概述主要完成了以下功能: 1.自定义数字键盘 2.切换到随机数字键盘 3.自定义确定和删除等键(向外抛出接口,感觉设计的挺好)下面先看下运行效果吧使用方法1.在项目build.gradle文件中添加j原创 2017-09-06 15:49:49 · 4865 阅读 · 7 评论 -
How to become a better Android developer: 30+ bite-sized pro tips
转自:https://techbeacon.com/how-become-better-android-developer-30-bite-sized-pro-tipsBecoming an Android developer is easy, but becoming a successful Android developer and standing out from the rest is转载 2017-08-24 20:03:37 · 4659 阅读 · 0 评论 -
ListView之ImageLoader实现图片加载
最近一直忙着做项目,今天也是忙里偷闲,想写篇博客来巩固下之前在应用中所用的知识。之前我们可能会也会肯定遇到了图片的异步加载问题,然而我们也可能会遇到图片二次或多次加载,这是ListView的特性造成的,具体原因不在这里讨论,又或者是OOM等问题。今天要讲的是一个开源框架Imageloader,个人觉得非常的好用。 该框架在github的地址。https://github.com/n原创 2016-09-30 12:05:57 · 756 阅读 · 0 评论 -
Android之Intent传对象
Android传递对象有两种方法,分别是让类实现serializable和parcelable接口。下面对这两种接口进行简单的介绍。1、作用 Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间原创 2016-10-12 20:56:41 · 518 阅读 · 0 评论 -
SharedPreferences存储图片对象与获取
最近开发中需要将设置头像从网络中下载,然后存储到本地,优先判断本地是否存在这个头像。 1.将网络上的图片下载下来(用了AsyncTask), protected Bitmap doInBackground(String... params) { HttpClient httpClient=new DefaultHttpClient(); HttpGe原创 2016-09-06 22:53:37 · 3355 阅读 · 0 评论 -
ListView的优化
首先我们要知道listview的原理,它的每个item显示的时候都会调用adapter中的getview的方法,并且,在getview中寻找view的控件的时候,是每个控件都会去findViewById寻找一遍的,基于此,以及查询资料,小白弄清楚了这两个问题的优化方法。 1.我们需要重写baseadapter的getview方法,然后复用convertView。 2.把控件对象设置到viewho原创 2016-04-14 15:20:15 · 569 阅读 · 0 评论 -
去除listview和gridview的点击效果
我们都知道listview和gridview点击时可能会出现橙色的点击效果,不怎么美观,有的时候我们不需要这个点击的效果。很简单 直接上代码,只需要在listview或者gridview里面的xml布局文件加上android:listSelector="@android:color/transparent"就可以了原创 2016-04-07 21:34:14 · 1057 阅读 · 0 评论 -
startActivityForResult+Intent实现下一个activity传值给当前activity
今天想在地址管理页面添加新地址,需要把添加的新地址里面的内容放到地址管理页面,之前用的是startactivity+intent 传值,一直报空指针,原因是因为当你在获取新地址内容的时候那个activity还没有oncreate。 然而。用startActivityForResult+Intent就可以实现了。requestcode和resultcode相当于标志,用来判断哪两个activity之原创 2016-03-20 17:21:00 · 2187 阅读 · 0 评论 -
setclickable(false)不可用
昨天在项目开发中碰到一个问题,想把获取验证码的按钮在手机号码格式不正确的情况下设为不可点击的状态 if (!JudgePhoneNumber.judgePhoneNums(editText.getText() .toString())) {verificationcodeButton.setclickab原创 2016-03-18 10:29:22 · 1275 阅读 · 0 评论 -
Intent 进行activity 与activity之间的传值
activity之间不能直接调用值,因为当你开了另外一个activity的时候,另外一个activity已经销毁了。intent可以实现activity之间的传值。1、intent的putExtra参数一个键值对 在需要传输数据的activity写下列代码Intent intent = new Intent(RegisterActivity.this, Sec原创 2016-03-16 20:54:00 · 976 阅读 · 0 评论 -
android控件SwipeRefreshLayout实现下拉刷新
新手写博文,写的不好,还请见谅。Google为我们推出的控件可以简单的实现下拉刷新的功能,但是这里要注意的是,我们需要引入v4的jar包,并且在xml文件引用SwipeRefreshLayout。 1.xml文件引用SwipeRefreshLayout,代码如下 <android.support.v4.widget.SwipeRefreshLayout xmlns:a原创 2016-01-14 18:08:51 · 467 阅读 · 0 评论 -
ProgressBar的使用以及实现进度条的增减
ProgressBar 的使用,以及通过按钮实现增加和减少第一进度和第二进度条。 重要方法提要 设置窗口特征: requestWindowFeature(Window.FEATURE_PROGRESS); 获取进度条: int first=progressBar.getProgress(); int second=progressBar.getSecondaryProgress原创 2015-12-10 19:19:34 · 2031 阅读 · 1 评论 -
Android 支付宝支付详解与demo
先给出可用demo吧 支付宝可用demo下载地址 前段时间公司项目需要集成支付宝支付,蚂蚁金服的文档和demo可以说是非常清晰的,经过一些时间的摸索,也是把支付宝支付集成到了项目中。不可缺少的是去蚂蚁金服申请产品签约,这些就不多说了,按照文档一步一步来,应该是没有什么问题的。我们会得到下面几个参数 // 商户PID public static final String PARTN原创 2016-12-02 19:41:02 · 6293 阅读 · 13 评论