![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 61
萨达哈鲁君
写代码享受的表情
展开
-
如何在Activity中获取调用者 -- getReferrer()
如何在Activity中获取调用者 – getReferrer()前言为什么要在Activity中获取调用者?主要是安全和定制两个方面的需求吧。安全需求:一般Activity如果已经对外开放了(即exported为true,或者加了Intent-filter),那么对Activity的保护就会降低,形成Activity攻击面,引入了风险。如果只对某几个app开放其Activity,则...原创 2019-12-29 23:24:01 · 1446 阅读 · 0 评论 -
源码解析view的显示判断用isShown()还是View.VISIBLE
前言平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view.getVisibility() == View.VISIBLE 判断好呢?其实可以来看看源码public boolean isShown ()Added in API level 1Returns the visibility of this view and all...原创 2019-10-18 20:30:02 · 557 阅读 · 0 评论 -
编译出错 ninja: build stopped: subcommand failed Android
解决方法错误:ninja: build stopped: subcommand failed.办法一:按照提示:ulimit -c unlimited该命令的详细解释参考:https://www.cnblogs.com/qq78292959/archive/2012/05/08/2490443.html命令解释:ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用...原创 2019-10-16 08:40:26 · 40203 阅读 · 0 评论 -
Android应用程序的启动过程
前言在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会...原创 2018-07-29 22:44:52 · 1339 阅读 · 0 评论 -
JAVA / Android 设计模式之建造者(Builder)模式
前言在使用一些热门第三方框架的时候,我们往往会发现,比如okHttp的client,初始化retrofit 对象,初始化 glide 对象等等,都用了这样:Retrofit.Builder().baseUrl(baseUrl).client(getClient()).addConverterFactory(FastJsonConverterFactory.create()).a...原创 2018-07-12 20:40:06 · 433 阅读 · 0 评论 -
Android开发@IntDef完美替代Enum (枚举)
概要Enum 是 java 中一种包含固定常数的类型,当我们需要预先定义一些值时,我们使用 Enum,这样做通常为了在编译时期避免接受额外常量引起的错误。而且,Enum 增加了APK 的大小,比常量多5到10倍的内存占用,这是关于应用性能的最佳实践.使用 Enum 的缺点每一个枚举值都是一个对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 String 会占...原创 2018-06-14 13:25:02 · 1750 阅读 · 0 评论 -
JAVA / Android 设计模式之策略模式
前言策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。背景在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一...原创 2018-06-13 12:46:02 · 423 阅读 · 0 评论 -
在 Android Studio 上实时调试数据库( SQLite )
SQLScout安装SQLScout 是一个 Android Studio 的插件,通过点击:Setting —> Plugings —> Browse Repositories搜索 SQLScout 安装即可。要是下载不动,可以到 这里 下载,然后点击 Install plugin from disk 导入。加载成功安装后重启 Andro...原创 2018-06-11 19:33:31 · 4028 阅读 · 0 评论 -
Android Studio 插件推荐
简述现在用AndroidStudio的越来越多了,工具当然也是必不可少的,这里收集了平时觉得不错的插件共享给大家。安装说明给出的插件,可直接根据名字,在AndroidStudio - File - Setting - Plugins - Browse Respositories中搜索插件,下载成功后,重启AndroidStudio即可。热腾腾的插件已经躺好了Mate...原创 2018-05-13 18:05:01 · 3364 阅读 · 0 评论 -
Android 中的onActivityResult和setResult方法的使用
Android 中的onActivityResult和setResult方法的使用简介如果想在Activity中得到新打开Activity关闭后返回的数据,需要使用Activity中的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭之后会向前面的Activity传回数据,为...原创 2018-05-03 23:13:53 · 828 阅读 · 0 评论 -
Android ORM 框架之 greenDAO
概要GreenDao简介我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。greenDAO是一种An...原创 2018-03-24 21:31:45 · 410 阅读 · 0 评论 -
狼人杀语音法官助手
狼人杀语音法官助手简介为什么叫语音法官助手呢?因为他可以自己在黑夜里叫玩家睁眼闭眼,记录 游戏状态,这样当玩狼人少一个法官,或者大家都要玩的时候,有一个手机当法官,岂不是美滋滋?版本V 1.1.0 版本增加重新选择人数以及角色功能,可以重新选择游戏人数,重新选择游戏角色; 修复一些已知Bug;V 1.0.0 版本1.0.0版本暂时只提供第一页的记录功能...原创 2019-12-30 14:56:23 · 15059 阅读 · 2 评论 -
Android 开发者如何成为 RxJava 老司机
Android 开发者如何成为 RxJava 老司机RxJava 是个什么玩意关键词 : 异步 RxJava 自我介绍的原文是: a library for composing asynchronous and event-based programs using observable sequences for the Java VM即:...原创 2018-02-27 20:37:17 · 845 阅读 · 0 评论 -
LeakCanary 原理浅析
前言提到Java语言的特点,无论是教科书还是程序员一般都会罗列出面向对象、可移植性及安全等特点。但如果你是一位刚从C/C++转到Java的程序员,对Java语言的特性除了面向对象之外,最外直接的应当是在Java虚拟机(JVM)在内存管理方面给我们变成带来的便利。JVM的这一大特性使Java程序员从繁琐的内存管理工作中得到了一定解放,但是JVM的这个特点的实现也是有代价的,并且它也并非万能。因此...原创 2018-08-04 09:59:59 · 3812 阅读 · 0 评论 -
okhttp3 源码详细解析
前言OkHttp是一个非常优秀的网络请求框架。目前比较流行的Retrofit也是默认使用OkHttp的。所以OkHttp的源码是一个不容错过的学习资源。基本使用从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.源码地址OkHttpClient client = new OkHttpClient();String run(String url) thro...原创 2018-08-04 22:34:23 · 1016 阅读 · 0 评论 -
Android ListView与RecyclerView对比浅析
前言RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大和灵活。弄清楚RecyclerView是否有足够的吸引力替换掉ListView,我从性能这一角度出发,研究RecyclerView和ListView二者的缓存机制,并得到了一些较有益的”结论”,待我慢慢道来。同时也希望能通过本文,让大家快速了解RecyclerView与L...原创 2018-08-01 08:31:27 · 6557 阅读 · 0 评论 -
Android 适配之FileProvider的使用
Android 7.0 文件权限的变化为了提高私有文件的安全性,在targetSdk版本为N或者以后版本的app中,其私有目录将会限制访问。这可以防止私有文件元数据的泄露,比如文件大小或者是文件是否存在。但这给开发者带来了一些不利的影响:文件的所有者不能放宽文件权限,如果你使用MODE_WORLD_READABLE或者 MODE_WORLD_WRITEABLE操作文件,将会触发Secur...原创 2019-08-30 21:04:59 · 24106 阅读 · 0 评论 -
使用Android Studio批量转换图片为Webp格式
简介Webp是一个现代的图片格式提供优秀的无损和有损压缩。使用Webp我们可以创建更小更丰富的图片。Webp无损图片比PNG图片的size小26%。Webp有损图片在同等SSIM(结构化相似)质量下比JPEG小25-34%。无损Webp支持透明度(透明通道)只占22%额外的字节。如果可以接受有损RGB压缩,有损Webp也支持透明度,通常比PNG文件size小3倍。具体方法Android ...原创 2019-08-30 20:32:59 · 3999 阅读 · 0 评论 -
Android开发之全局异常捕获
前言大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服...原创 2018-09-04 19:43:02 · 3909 阅读 · 0 评论 -
Android内存优化--使用SparseArray和ArrayMap代替HashMap
前言在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的api,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提...原创 2018-09-04 19:25:14 · 344 阅读 · 0 评论 -
Android 9 Pie 现已面向全球正式发布!
前言经历一年多的开发和数月以来早期用户的反复测试,最新 Android 平台 —— Android 9 Pie 终于正式面向全球发布!Android 9 利用人工智能技术,让您的手机更加智能、简洁与人性化。请通过本文了解 Android 9 的所有新特性,同时也希望各位开发者能够借助 Android 9,全面提升应用性能,打造出色体验,让您的应用与用户走得更近!在 Android ...转载 2018-08-08 08:08:29 · 1569 阅读 · 0 评论 -
Android应用层View绘制流程与源码分析
前言Activity中界面加载显示的基本流程原理,最终分析结果就是下面的关系: 看见没有,如上图中id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归的实现。Android中的任何一个布局、任何一个控件其实都是直接或间接继承自View实现的,当然也包括我们后面一步一步引出的自定义控件也不例外,所以说这些View应该都具有相同的绘制流程与...原创 2018-08-12 20:36:07 · 246 阅读 · 0 评论 -
LruCache 源码解析
简介 LRU 是 Least Recently Used 最近最少使用算法。 曾经,在各大缓存图片的框架没流行的时候。有一种很常用的内存缓存技术:SoftReference 和 WeakReference(软引用和弱引用)。但是走到了 Android 2.3(Level 9)时代,垃圾回收机制更倾向于回收 SoftReference 或 WeakReference 的对象。后来,...原创 2018-08-15 08:31:36 · 311 阅读 · 0 评论 -
Android高效加载大图、多图解决方案,有效避免程序OOM
高效加载大图片我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可...原创 2018-08-15 07:54:47 · 256 阅读 · 0 评论 -
Retrofit2.0 源码分析
前言注解式的框架非常火,注解以其轻量,简洁等特性被人们所喜爱者,关键是它解藕。网络请求的框架非常多,比较受欢迎的当属retrofit和okHttp了。连retrofit都是基于okHttp之上开发的。ok, 言归正传,我们来聊聊retrofit。如果对okhttp有疑问的可以阅读我的这篇文章:okhttp3 源码详细解析简介特别注意:准确来说,Retrofit 是一个 R...原创 2018-08-10 08:35:40 · 333 阅读 · 0 评论 -
Android布局优化之标签include,viewstub,merge
前言布局优化对于每个项目总是必不可少,本文主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面可调优点,顺带提及布局调优相关工具(hierarchy viewer和lint)。抽象布局标签< include >标签include标签常用于将布局中的公共部分提...原创 2018-08-01 08:59:35 · 593 阅读 · 0 评论 -
EventBus 使用详解
EventBus 使用详解概述EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这里的事件可以理解为消息。事件传递既可以用于Android四大组件间通讯,也可以用于异步线程和主线程间通讯等。传统的事件传递方式包括:Handler、BroadcastReceiver、Interface回调等 相比之下EventBus代码简洁,使用简单,并将事件原创 2017-12-25 20:11:32 · 670 阅读 · 0 评论 -
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)synchronized用法synchronized修饰的对象有几种:修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象;修饰一个方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修饰一个静态的方法:其作用的范围是整个方法,作用的原创 2017-12-19 20:03:03 · 25017 阅读 · 8 评论 -
Android硬件之传感器
Android硬件之传感器传感器是Android重要的一部分,大多数设备都会支持某部分传感器。例如:方向传感器(电子罗盘)、重力传感器(狂野飙车,极品飞车、屏幕翻转等)Android SDK 提供了 Android sensor framework 安卓传感器框架,可以用来访问当前Android设备内置的传感器。所有常量在Sensor类中定义1. TYP原创 2016-08-31 22:01:22 · 2141 阅读 · 2 评论 -
Android自助导游系统 -- 到此一邮
恩,写的比较简单的一个自动导游系统。高德地图的API,分享用的是Share的API。Github地址:https://github.com/sadaharusong/Lbs/主要功能:有地图显示,进入地理围栏之后(接近),可播放语音说明。用户所到之处,也可以进行录音分享、拍照分享,游览线路可制作和分享。用例模型图原创 2016-08-10 13:58:35 · 3873 阅读 · 38 评论 -
Activity生命周期
唉:先来张图?当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。原创 2016-07-21 14:48:40 · 767 阅读 · 0 评论 -
Activity的启动模式
Android内部使用通过回退栈来管理Activity实例。当前显示的Activity就在栈顶,点击返回时,此Acitivity就会出栈,上一个就会到栈顶。特殊情况~就需要设置Activity的启动模式。1、standard(标准启动模式)也是默认的。可以被多次实例化,同一个任务栈里面可以存在多个Activity实例。如果一个Activity的启动模原创 2016-07-21 14:47:41 · 738 阅读 · 0 评论 -
Android连连看 -- 银魂连连看
恩,自己很久以前写的一个银魂连连看的APP,现在整理分享出来GitHub地址 : 感兴趣可以下载来玩玩以及修改其中的功能逻辑。主页是这样:游戏核心内容是这样:主体的代码结构如图:原创 2016-08-09 01:14:35 · 1923 阅读 · 0 评论 -
Android Studio 常用快捷键
其实偷偷告诉你Android Studio还是挺好用的,可以试着去习惯。不过你要是在Android Studio里面强行使用Eclipse里面的也是可以的,设置方法:File --> Settings --> Keymap --> 选择即可其实。。。AS还是挺好用的,以下是经常使用的哈。打印Log相关:logt 直接就会生成一个Log的TAG的原创 2016-08-18 20:48:53 · 1204 阅读 · 0 评论 -
Android的savedInstanceState
在一个Activity的onCreate()方法中总是会看见一个 public void onCreate(Bundle savedInstanceState) 这个savedInstanceState是用来保存Activity的当前状态的。Activity中有两个方法onSaveInstanceState():遇到由系统销毁一个原创 2016-07-21 20:24:29 · 1580 阅读 · 0 评论 -
Android中的数据存储
一、SharedPreferences存储数据适用范围:保存少量的数据。格式简单:基本类型的值,字符串等。比如配置信息(游戏中是否打开音效,震动效果,得分等)原理:保存基于XML文件存储的key-value值对数据。实现:不可直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(Stri原创 2016-07-21 14:54:32 · 987 阅读 · 0 评论 -
Handler 和 Looper的爱恨情仇
Handler机制是为了更新UI以及消息处理。不能在非UI线程中更新UI。Android提供了Handler 和 Looper 来满足线程之间的通信。Handler满足先进先出原则。Looper类用来管理特定线程内对象之间的消息交换。Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQu原创 2016-07-21 14:53:41 · 1303 阅读 · 0 评论 -
Android中四大组件(四大天王)
ActivityActivity的生命周期(其他博文中有详细)注意点:被其他Activity覆盖当前Activity进入OnPasue(), 启动其他Acitivity当前Acitivity进入OnStop()。Activity的启动模式(其他博文中有详细)注意点: Standard:只要新启动就会重新创建 si原创 2016-07-21 14:51:30 · 1206 阅读 · 0 评论 -
Android中的AsnycTask
在Android中实现异步任务机制有2中,Handler和AsnycTaskHandler需要为每一个任务创建新的线程,任务完成通过Handler实例向UI线程发送消息,完成界面的更新。Handler这要做比较精确,细致。但是代码会比较臃肿。为了简化操作,Android提供了工具类AsnycTask,它让创建异步变得简单。Asny原创 2016-07-21 14:49:43 · 1002 阅读 · 0 评论 -
java.lang.ClassCastException: android.app.Application cannot be cast to 异常
这个异常出现的时候,是在项目中添加了一个新的 lication 类这个类继承 lication ------ public class Application extends lication解决方法,应该在AndroidManifest.xml 添加声明。application会有以下一些默认的属性,你需要在name 中添加一个你所新建的lication类名androi原创 2016-07-21 14:21:06 · 2016 阅读 · 0 评论